2017-01-11 5 views
0

Я пытаюсь сопоставить определенную фразу, используя regexp, с границами слов, но она не работает должным образом. Что я делаю не так?Использование границы слова в regexp

if (preg_match("~\b(and you[?])\b~", " and you? ")) { echo "success"; } 

Не эхо "успех".

Однако с границей слова исключены:

if (preg_match("~(and you[?])~", " and you? ")) { echo "success"; } 

Он вторит "успех" по какой-то причине.

+2

Вы использовали '\ b' после' [?] ', Что означает, что после'? 'Должно быть слово char. Возможно, вам нужно '' ~ \ b (и вы [?]) ~ "' Или '" ~ \ b (и вы [?]) (?! \ W) ~ "'? –

+0

Это не соответствует, потому что граница слова после 'you' перед'? 'И после этого нет слова (и, следовательно, границы слова). – apokryfos

+0

@frosty, пожалуйста, проверьте ответы и мои комментарии. Не совсем ясно, какую границу вы ищете. –

ответ

0

Слово граница не соответствует знаку вопроса. Так что, если вы двигаетесь слово boundry перед знаком вопроса, это эхо «успех»

if (preg_match("~(\band you\b[?])~", " and you? ")) { echo "success"; } 
+0

Граница слов является излишней между 'you' и'? '. – Toto

+0

не работает, ваш будет соответствовать «а вы? Random_text» –

0

в вашем случае это не будет соответствовать как «?» не является частью слова, поэтому последний \ б не совпадают, вы можете попробовать:

if (preg_match("~(\band you[?])(?=\s|$)~", " and you? ")) { echo "success"; } 

что все экземпляры «и вы?» за которым следует символ типа пространства или конец строки.

Смежные вопросы