2017-03-11 2 views
0

dargestellt Ich hatte versucht, dies aber nicht in der Lage zu nutzen, um zu verstehen, was hier falsch istPHP Muster für ganzes Wort nur mit variabler

preg_match('/\b'.$string.'\b/i', $fullstring); 

Die Absicht ist, nur ein ganzes Wort passen, wo das Wort jemand Eingang ist der Wille Teil der Variablen $string sein. ZB "mein Name ist alto besser", der durch '| getrennt ist "als OR im Regex-Betrieb zu fungieren.

<?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); 

Ausgang ist null. Was könnte falsch sein?

+0

Wie sehen '$ value ['user_id']' 'Werte aus? –

+0

es ist so etwas wie "ABC1000" – team

+0

Und wie ist Ihre '$ string'? Ich frage das, weil '\ b' Bedeutung kontextabhängig ist. –

Antwort

0

Wenn Sie Ihre Eingabe ein regulärer Ausdruck mit alternativen Zweigen ist, dass Sie die Wortgrenzen auf eine Gruppe anwenden müssen, finden Sie

 preg_match('/\b(?:' . $string . ')\b/i', $fullstring, $match); 

Warum ein Konstrukt Gruppierung verwenden? Denn wenn Sie dem 'my|name|is|alto|better' Regex-Muster nur Wortgrenzen hinzufügen, werden nur my und teilweise eingeschränkt: my passt nur am Anfang eines Wortes und passt am Ende eines Wortes - das ist kurz gesagt die Essenz des Problems, das Sie nach dem Hinzufügen von Wortgrenzen hatten, ohne zuerst die Alternativen zu gruppieren.