为什么我需要这个正则表达式中的空格?

时间:2017-02-18 16:33:48

标签: php regex

我正在尝试使用PHP Eu匹配U.s.preg_match_all
鉴于以下句子:

  欧盟优于美国。在某些方面。

我可以匹配Eu和U.如果我使用:

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

但不是如果我使用:

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

为什么我需要一个空格。为了让我的正则表达式工作?

2 个答案:

答案 0 :(得分:4)

元字符\ b是一个像插入符和美元符号的锚。它匹配一个称为“单词边界”的位置。这个匹配是零长度。

有三种不同的职位符合词边界:

  1. 在字符串中的第一个字符之前,如果第一个字符是 一个单词字符(\ w)。

  2. 在字符串中的最后一个字符之后,如果是最后一个字符 一个字符。

  3. 字符串中的两个字符之间,其中一个是单词 字符和另一个字不是字符。
  4. 所以在你的情况下,这是美国的第3号。这样的界限: \ b U \ b。\ b s \ b。

答案 1 :(得分:1)

@ mmta41说的是什么。这是一个测试:

$re = '/(eu|\bU\b.\bs\b.)/mi';
$str = 'U.s.,u.S., U.S. , u.s.. ,Eu,eU, EU , eu.Europe UseuUs Europe';

preg_match_all($re, $str, $matches);

print_r($matches);

请参阅http://sandbox.onlinephpfunctions.com/code/9f435a11609606cf7f8d4f5e330d443989911c5b