2017-02-18 95 views
1

我试图使用PHP的preg_match_all来匹配EuU.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

\ b词边界一致。例如逗号,句号或空格。既然你也有一个边界字符,你匹配它会导致你的问题。你是否试图在你的代码的任何地方或最后找到该字符串。你能给一个你匹配的例子字符串吗? – Augwa

+0

它可能在一个句子的中间作为一个单词,也可能在它之后有一个逗号。例如“在美国,我们认为美国是(嘿,不会在这里变得政治化:写任何你喜欢的东西!”)。在我之前的一句话中,这两个国家都是。应该匹配。 – Eric

+0

只用于'\ b' oO? – cottton

回答

4

元字符\ b是一个类似插入符号和美元符号的锚点。它匹配在一个称为“文字边界”的位置。这场比赛是零长度。

有迹象表明,有资格作为单词边界的三个不同位置:

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

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

  3. 字符串中的两个字符之间,其中一个字是 字符,另一个不是字符字符。

所以在你的情况下,这是3号的美国。如下所示:\ b U \ b。\ b s \ b。

+0

没错。请参阅示例:http://sandbox.onlinephpfunctions.com/code/9f435a11609606cf7f8d4f5e330d443989911c5b – cottton

相关问题