2017-02-18 65 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

相關問題