您可以在逆序引用中使用反向引用嗎?逆向引用的反向引用
比方說,我想要split
無論身後的任何角色重複兩次。
String REGEX1 = "(?<=(.)\\1)"; // DOESN'T WORK!
String REGEX2 = "(?<=(?=(.)\\1)..)"; // WORKS!
System.out.println(java.util.Arrays.toString(
"Bazooka killed the poor aardvark (yummy!)"
.split(REGEX2)
)); // prints "[Bazoo, ka kill, ed the poo, r aa, rdvark (yumm, y!)]"
使用REGEX2
(其中反向引用是嵌套在回顧後內先行)的作品,但REGEX1
給在運行時出現此錯誤:
Look-behind group does not have an obvious maximum length near index 8
(?<=(.)\1)
^
這排序是有意義的,我假設,因爲在一般的反向引用可以捕獲任何長度的字符串(如果正則表達式編譯器是有點聰明,雖然,它可確定\1
是在這種情況下(.)
,因此具有有限的長度)。
那麼有沒有一種方法可以在lookbehind中使用反向引用?
如果沒有,您是否總是可以使用這種嵌套的預覽工作?還有其他常用技術嗎?
有趣的是,和+1爲您巧妙的解決方法。我不使用Java,所以我不能自己嘗試 - 如果反向引用的組不在lookaround之後,會發生什麼情況,比如'(?<= \\ 1)(。)'? – 2010-04-29 07:29:09
@Tim:它導致基本相同的'PatternSyntaxException'。 http://codingbat.com/prob/p266235 – polygenelubricants 2010-04-29 07:45:19
@polygenelubricants我希望我能給予好評這個表達式:順便說一句,如果有人想玩弄這個問題的一個變種,我只是codingBat着一個?(<= (?=(。)\\ 1)..)至少10次。十分優雅! – Eugene 2012-08-14 08:35:49