Porównaj ceny domen i usług IT, sprzedawców z całego świata

PHP/Regex: Wyodrębnij ciąg z ciągu


Właśnie zacząłem używać PHP i mam nadzieję, że ktoś tutaj może mi w tym pomóc.
Próbuję wyodrębnić ciąg („
myRegion
”) z innego ciągu („
mainString
”), gdzie mój ciąg zawsze zaczyna się od „
myCountry:
”i kończy się średnikiem (
;
), jeśli główny wiersz zawiera więcej krajów po myCountry LUB bez niczego, jeśli główny wiersz nie zawiera więcej krajów po nim.

Przykłady pokazujące różne opcje dla linii głównej

:
  • myCountry: region1, region2
  • myCountry: Region1, Region2, Region3 ; otherCountry: region1
  • otherCountry: region1; myCountry: region1 ; otherCountry: region1, region2

To, co chcę wyodrębnić, jest zawsze pogrubione.

Myślałem o czymś podobnym do następującego, ale to jeszcze nie wygląda

:
$myRegions = strstr($mainString, $myCountry); 
$myRegions = str_replace($myCountry . ": ", "", $myRegions);
$myRegions = substr($myRegions, 0, strpos($myRegions, ";"));

Z góry dziękuję za pomoc, Mike.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Korzystanie z wyrażenia regularnego:
preg_match('/myCountry\:\s*([^\;]+)/', $mainString, $out);
$myRegion = $out[1];
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ponieważ z komentarzy wynika, że ​​interesują Cię rozwiązania inne niż regex, a ponieważ jesteś początkującym i zainteresowany nauką, oto inne możliwe podejście wykorzystujące
explode
http://www.php.net/manual/en/function.explode.php
.
(
mam nadzieję, że to nie jest nieodpowiednie dla

).
Po pierwsze, pamiętaj, że masz definicje oddzielone
;
, ponieważ jest to:
myCountry: region1, region2, region3
;
otherCountry: region1
Więc używając
explode
http://www.php.net/manual/en/function.explode.php
Możesz wygenerować tablicę swoich definicji:
$string = 'otherCountry: region1; myCountry: region1; otherCountry: region2, region3';
$definitions = explode (';', $string);

dać ci
array(3) {
[0]=>
string(21) "otherCountry: region1"
[1]=>
string(19) " myCountry: region1"
[2]=>
string(31) " otherCountry: region2, region3"
}

Możesz teraz iterować po tej tablicy (używając
foreach
http://www.php.net/manual/en/c ... ch.php) i zdetonuj go za pomocą
:
, a następnie zdetonuj drugi wynik tego za pomocą
,
.
W ten sposób możesz utworzyć asocjacyjną tablicę zawierającą twoje kraje z ich odpowiednimi regionami.
$result = array();
foreach ($definitions as $countryDefinition) {
$parts = explode (':', $countryDefinition);// parting at the :
$country = trim($parts[0]);// look up trim to understand this
$regions = explode(',', $parts[1]);// exploding by the , to get the regions array
if(!array_key_exists($country, $result)) {// check if the country is already defined in $result
$result[$country] = array();
}
$result[$country] = array_merge($result[$country], $regions);
}

Po prostu bardzo

prosty przykład
http://sandbox.onlinephpfuncti ... 1720e
do gry.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się