2011-10-17 30 views
3

另一個正則表達式問題。我如何創建一個正則表達式來捕獲文本的一部分並在其他地方匹配該部分?正則表達式匹配文本中的重複部分

例如,假設我有一個表達"(ab[cd]) bbb (ab[cd])"這將匹配以下字符串:

"abc bbb abc" 
"abc bbb abd" 
"abd bbb abc" 

我想要做的就是把文字「ABC」的第一截取部分並檢查它也重複在該文本的結尾,所以這些字符串將產生這樣的結果:

"abc bbb abc - Success" 
"abc bbb abd - Error" 
"abd bbb abc - Error" 
"abd bbb abd - Success" 

當然,這例如是簡單的和其可以檢查,而不使用正則表達式,但我有一個真實的例子更復雜,我想堅持正則表達式在這裏。

+0

這就是[backreferences](http://www.regular-expressions.info/brackets.html)。 –

+0

形式上,正則表達式與有限狀態機器相同,並且無法用FSM解決這個問題(因爲它需要內存)。因此,對於所有的正則表達式的實現都沒有解決方案。但是,C#中的正則表達式實現可能具有非FSM擴展。 – Oliver

回答

1

只需使用反向引用即可。例如

^(abc).*?\1$ 

將匹配以abc開頭的字符串,後跟任何內容,並以匹配字符串開頭的部分結尾。

1

您可以使用反向引用。在你的例子中的表達將是

/(ab[cd]) bbb \1/ 
+0

對不起,我沒有檢查標籤。我不知道'\ 1'是否可以在c#中工作。如果不是,請嘗試使用「$ 1」 –