2012-12-28 156 views
6

我使用標準的\b字邊界。但是,它並不完全符合我希望的方式處理點(。)字符。正則表達式字邊界替代

所以下面的正則表達式:

\b(\w+)\b

將匹配cats.dogcatsdogs,如果我有一個字符串,說cats and dogs don't make cats.dogs

我需要一個單詞邊界的替代方案,將僅匹配整個單詞:(。)

  1. 它不包含點字符
  2. 它是由至少一個空間(封裝)字符上每邊

任何想法?

P.S.我需要這個PHP

+0

你想要「不真實」 –

回答

5

你可以代替\b後,嘗試使用(?<=\s)(?=\s),以確保有之前和之後的空間,但是你可能想也允許的是在開始的可能性或(?<=\s|^)(?=\s|$)

字符串這會自動排除「字」與他們.,但它也將在句末排除的單詞,因爲有它,句號之間沒有空格結束。

+0

謝謝。任何方式我都可以在句子的開頭和結尾加上單詞?!我可能不需要它,但它可能只是很好的知道。 –

2

您試圖匹配的內容可以通過數組和字符串函數輕鬆完成。

$parts = explode(' ', $str); 
$res = array_filter($parts, function($e){ 
    return $e!=="" && strpos($e,".")===false; 
}); 

我推薦這種方法,這樣可以節省時間否則浪費幾個小時找到一個好的正則表達式解決方案是非常沒有生產力的

+0

我需要這個作爲另一個正則表達式的一部分作爲'preg_replace'函數的第一步,所以它不會爲我需要做的事情工作 –

+0

然後它最好問你實際需要什麼。有可能比正則表達式更好的解決方案。 –