2016-08-11 40 views
0

是否有可能得到一個嵌套反向引用下面的正則表達式:正則表達式反向引用嵌套

<field(.*)name="(.*)EndTime"(.*)\n((.*)\n)*?<property name="fieldClass" value="java.lang.String"/>\n</field> 

即在"((.*)\n)*?"

+1

不要使用RegEx解析XML!請參閱http://stackoverflow.com/questions/8577060/why-is-it-such-a-bad-idea-to-parse-xml-with-regex – AlexR

回答

1

是的,這是完全可能的。只要確定要注意您正在使用的編號組。捕捉羣組(因此是反向引用)按照哪個開頭括號首先被編號 - 因此,在這種情況下,外部括號會產生\1,而內部的將產生\2

例如,模式((.+)ab)\1\2將匹配字符串1234ab1234ab1234。第一個捕獲組將匹配4個數字加上ab,而第二個(內部)捕獲組只匹配數字。然後我們重複每一個,產生完整的匹配。

+0

也許值得一提的是命名捕獲組以避免混淆哪個組是哪個組並且能夠明確引用某個組。 –

+0

我不太明白你在這裏的意思。你能提供一個例子嗎? – IanWatson

+1

[您可以將您的捕獲組命名爲](http://www.rexegg.com/regex-capture.html#namedgroups)並用這些名稱反向引用它們。雖然沒有直接回答提出的問題,但我認爲值得一提的是避免由嵌套括號引起的任何混淆。然後你可以做''(? ab(? ba))'以使'$ {first} == abba'和'$ {second} == ba' –