2013-07-21 73 views
1

測試,我想下面的句子匹配:

正則表達式:「一個或零」不上這個 <a href="http://tools.netshiftmedia.com/regexlibrary/" rel="nofollow">http://tools.netshiftmedia.com/regexlibrary/</a></p> <p>好工作

第一沒有我說的最後

首先我說的最後

第一個不是最後

第一個最後

第一沒有TE最後

第一TE最後

第一沒有LA最後

第一拉最後



第一最後

的規則圖案:

first ((no)?((lo)|(no)|(la)|(te)|(me)))? last 

不能匹配

first last 

怎樣才能使這個比賽與

first last 
+0

這是有效的太「首先沒有我說的最後最後最後」? –

回答

1

你的正則表達式中包含兩個空格。

刪除其中之一。

first((no)?((lo)|(no)|(la)|(te)|(me)))? last 

first ((no)?((lo)|(no)|(la)|(te)|(me)))?last 
3

在正則表達式的地方添加一個可選的空間,如:

first ((no)?(((lo)|(no)|(la)|(te)|(me))))?last 

你的正則表達式需要兩路空 - 一個在可選的中央正則表達式的每一端。

這個正則表達式將「last」的前導空間移動到「lo | no | la ...」正則表達式的尾部空間中,賦予它類似於可選「no」的效果。

+0

+1,但寫出例如'首先(?= [^])?'而不是簡單的'先?'。 – ruakh

+0

+1,如果您認爲可以工作,請參閱我的解決方案。謝謝。 –

0

你當前的正則表達式有兩個空格。使第二個空間可選。

0

你的正則表達式有太多空間...

first ((no)?((lo)|(no)|(la)|(te)|(me)))? last

,如果我們去掉中間位,我們得到

first  last

注意第一後的空間,和前年的空間。刪除其中一個空格,它會起作用。

+0

如果刪除空格,它不匹配「首先沒有最後一個」 – Daniel

+0

您要求使它匹配「第一最後」,我的解決方案旨在告訴你什麼是問題。你不要去除任何地方的所有空間。您不必刪除正則表達式中的中間部分。你確實需要做一些事情來確保你的正則表達式只匹配你想匹配的東西 - 包括空格 - 而不需要你不想匹配的其他東西(比如無關的空格)。 – atk

0

你只需要,如果有一個no額外的空間,因此使之成爲集團的一部分。

first ((no)?((lo)|(no)|(la)|(te)|(me)))?last 

不管你用空格做的,是一致的,要小心他們去哪個組要麼把他們立即跟隨他們屬於或之前的一個詞。這應該是等價的,但這個詞之前提出的空間,而不是後:

first((no)?((lo)|(no)|(la)|(te)|(me)))? last 

你可能要考慮使用\s字符類+相結合,與空白更加靈活。

0

試試這個可能會對你有幫助。我根據你提供的鏈接做了這個,所以在真實場景中可能是錯誤的。

這也將比賽(如果你不想)第一沒有拉最後最後最後

first ((no)?((lo)|(no)|(la)|(te)|(me))?)?last$ 
相關問題