2011-10-14 24 views
2

問題是更容易在代碼被視爲不包括它在比賽然後描述我得到以下的正則表達式正則表達式可選部分的,但如果它存在

(?<=First(Second)?)\w{5} 

和下面的示例數據

FirstSecondText1
FirstText2

我只想匹配Text1 & Text2,我雖然得到3,Secon被添加,我不想那樣。 玩過,似乎無法得到它的工作。

+0

爲什麼'[\ w \ W] {5}'?如果您使用的是JavaScript並希望匹配換行符,則這種方法纔有意義。否則,只需使用'。{5}'(帶或不帶'(?s)'dot-matches-all標誌)。 –

+0

我已經編輯過,正在測試一些多行數據,因此,雖然我們在這裏:是否有更好的方法來捕獲任何東西,然後[\ w \ W]? –

+0

是的,只需使用dot和DOTALL選項(細節因正則表達式實現而異)。 –

回答

4

你需要一個額外的負前瞻:如果你想避免使用Second兩次

(?<=First(Second)?)(?!Second)\w{5} 

,你可以做到這一點,而不環視,並採取第一個捕獲組的結果:

First(?:Second)?(\w{5}) 
+0

哦,很酷的感謝,其他不可能的其他方式是正確的?在我的情況二是相當大的...和正則將受益,如果它只是使用一次 –

+0

是啊這是一個選項,但我需要從問題的結果。我認爲必須有一種方法可以使用類似平衡組的方式來使用(第二次)捕獲的參考? –

+0

問題是,我得到這個「Secon」,看起來這樣不行,平衡組值在S字符和後綴爲空之前停止。 –

1

你可以試試這個正則表達式(?<=First(Second)?)\w{5}$。您所要做的就是最後添加$,以便正則表達式不會與文本Secon匹配。只要您確信輸入文本末尾出現的模式,您就可以使用它。在這種情況下,它是\w{5}$

+0

好主意,如果在這五個字符後沒有任何字符。 –

+0

如果某些文本出現在這5個字符後面,那麼'\ w {5} $'必須用一個新的模式替換,該模式描述特定文本的方式不包括可選前綴('Second')在匹配自身時的匹配。 –

+0

在現實\ w {5}是另一個複雜的正則表達式,可以出現1+次沒有已知的結尾.. –

相關問題