2010-01-13 39 views
0

... AA BB sysodufsoufdds BB AA ...遞歸正則表達式,如何用正則表達式匹配耦合字符串?

AABB可以arbitary連續字符串中沒有任何空間。

但我希望得到outest對AA

更多的例子:

輸入:

一個HH CC ABC CC HHÇ

輸出:

HH

輸入:

X YYYYĴDD GG DD許DD GG DDķYYYYö

輸出:

YYYY

爲了使我的問題更普遍,如何與正則表達式的HTML特定的標籤符合我見過的各個崗位討論這件事,但他們沒有放棄通過regex.Related問題一個答案是: I'm looking for a regular expression to remove a given (x)HTML tag from a string

+0

輸入:「x YYYY DD GG hsu GG DD YYYY」,是YYYY是否有效答案? – Nakul 2010-01-13 12:23:20

+0

是的,它是有效的。 – user198729 2010-01-13 12:24:43

+0

第二個示例不遵循您開始的模式。第二個例子是「AA str1 BB str2 BB str3 AA」(即,在配對的串之間有多於空白空間)。 – Richard 2010-01-13 12:53:03

回答

0

我認爲你需要在這裏回參考。像(試圖避免任何正則表達式語言的細節):

(\w+) \w* (\w+) \w+ \1 \w* \2 

隨着第一次捕獲是你的結果。

我認爲單個空格分隔字符串保持清晰,你可能需要允許任意空白與\s+,和\w(標識字符:大致[a-zA-Z9-0_])是字符串正確的匹配。

+0

爲了讓我的問題更一般化,如何用正則表達式匹配HTML中的特定標籤?我已經看到各種帖子討論這個,但沒有一個給出答案通過regex.Related問題是:http://stackoverflow.com/questions/116403/im-looking-for-a-regular-expression-to-remove-a-given-xhtml-tag-from-a-string – user198729 2010-01-13 13:29:56

+0

正則表達式一般來說是錯誤的方法,除非上下文受到實質限制(例如,您控制源)。最好使用解析器(如果你知道它是XHTML,可以是一個XML解析器)。 – Richard 2010-01-13 14:21:17

+0

假設我正在處理像東西這樣的html,但不完全是html。那麼DOM解析器將無法工作。 – user198729 2010-01-14 01:46:45

1
\b(\w{2,})\b.*\b\1\b 

將匹配從第一系列連續字符到重複之間的所有內容。反向引用\1將包含匹配的模式(例如,在您的示例中爲AA,HH或YYYY)。

\b s是強制執行字邊界所必需的。

編輯:哦。我只注意到你想完全做其他事情,即從字符串/文件中刪除HTML標籤。 不要使用正則表達式。當別人提出這樣的問題時,我不會引用其他人經常引用的文章,但問題(簡而言之)是HTML不規則,並且試圖在這裏使用正則表達式只是要求麻煩。這就是沒有人(在他們的正確思想中)使用正則表達式來「解析」HTML的原因 - 他們使用解析器。

這麼說,我使用正則表達式來從那裏我知道確切的結構和知道這個標籤我感興趣的永遠不會被嵌套等格式良好的XML源提取數據 - 但遞歸正則表達式如果它可以工作的話,它就會變得非常複雜(C#和Perl對此有一定的支持,但它卻令人難以置信)。

+0

+1是一個很好的答案,衷心的感謝您不要鏈接到The Rant。 – 2010-01-14 05:40:53