/ / Wzór PHP dla całego słowa reprezentowanego tylko zmienną - php, regex, preg-match

Wzór PHP dla całego słowa reprezentowany tylko zmienną - php, regex, preg-match

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 № 1

Jeś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.