2017-02-18 8 views
1

私はEuまたはU.s.のいずれかとPHPのpreg_match_allを使用して一致させようとしています。
与えられた文章は次のとおりです。なぜこの正規表現にスペースが必要ですか?

Euは、米国よりも優れています。ある意味で

私はEuとU.sの両方に一致します。私が使用している場合:

preg_match_all("/\b(Eu|U\.s\.)\b/", $input_lines, $output_array); 

ではなく、私が使用している場合:私は後にスペースを必要としないのはなぜ

preg_match_all("/\b(Eu|U\.s\.)\b/", $input_lines, $output_array); 

を。私の正規表現が機能するためには?

+1

はワード境界と一致してご覧ください。コンマ、ピリオド、またはスペースなどです。境界キャラクタもあるので、それにマッチしているので、問題が発生しています。その文字列をコード内のどこかで見つけようとしていますか?あなたがマッチしている例の文字列を与えることができますか? – Augwa

+0

文の途中に単語として置いても、後にコンマを置いてもかまいません。たとえば、「米国では、米国は(ここでは政治的にならない:あなたが好きなものを書いてください!)」と考えています。私の以前の文章では、一致させる必要があります。 – Eric

+0

と一緒に使うだけです。\ b' oO? – cottton

答えて

4

メタ文字は、キャレットとドル記号のようなアンカーです。それは "単語境界"と呼ばれる位置で一致します。このマッチは長さゼロです。

は、単語の境界としての資格3つの異なる位置があります:最初の文字が単語文字 であれば、文字列の最初の文字の前に

  1. (\ w)です。

  2. 文字列の最後の文字の後に、最後の文字が の場合は単語文字。

  3. 文字列内の2文字間で、1つは単語 文字で、もう1文字は単語文字ではありません。

ですので、あなたの場合は3番です。 \ b U \ b。\ b s \ bのように制限されています。

+0

。例をご覧ください:http://sandbox.onlinephpfunctions.com/code/9f435a11609606cf7f8d4f5e330d443989911c5b – cottton

関連する問題