Próbowałem to wykorzystać, ale nie mogłem zrozumieć, co tu jest nie tak
preg_match("/b".$string."b/i", $fullstring);
Intencją jest dopasowanie całego słowa tylko tam, gdzie jest to czyjeś wejście, które będzie częścią zmiennej $string
. Np. "Moje imię jest lepsze altem", które jest oddzielone przez "|", aby działać jako OR w operacji regularnego wyrażenia.
<?php
$fullstring = "Palo Alto New york colombia europe today Tomorrrow";
$string = "my|name|is|alto|better";
preg_match("/b".preg_quote($string)."b/i", $fullstring, $match);
print_r($match);
Wyjście to zero. Co może być nie tak?
Odpowiedzi:
0 dla odpowiedzi № 1Jeśli twoje wejście jest wyrażeniem regularnym z alternatywnymi gałęziami, musisz zastosować granice słów do grupy, zobacz
preg_match("/b(?:" . $string . ")b/i", $fullstring, $match);
Po co używać konstrukcji grupującej? Bo jeśli po prostu dodasz granice słów do
"my|name|is|alto|better"
tylko wzór regex my
i better
będą częściowo ograniczone: my
dopasuje tylko na początku słowa i better
dopasuje się na końcu słowa - to w skrócie esencja problemu, który pojawił się po dodaniu granic słów bez grupowania ich w pierwszej kolejności.