2017-01-11 4 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の(そしてあなた[?])(?!\ワット)〜"'? –

+0

you'が ''の前で後は?ワード境界ので、一致していない 'と全く言葉(したがってなしワード境界)はその後ありません。 – apokryfos

+0

@frosty、回答と私のコメントを確認してください。あなたが探している言葉の境界がどんなものなのかは本当にはっきりしていません。 –

答えて

0

ワードboundryは疑問符と一致していません。だから、疑問符の前に単語境界線を動かすと、「成功」というメッセージが表示されます。

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

単語境界は 'you'と'? 'の間に余計です。 – Toto

+0

が動作していないと、あなたは "and you?random_text" –

0

あなたの場合、「?」と一致しません。単語の一部ではないため、最後の\ bは一致しません。

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

これはすべて「and you?」のインスタンスです。スペースタイプの文字または文字列の終わりが続きます。

関連する問題