2013-07-02 69 views
2

我明白,Java中的lookbehinds不能使用*和+重複。我用括號來定義一個模式的重複的最大長度,但它仍然拋出了以下異常:模式語法異常拋出沒有一個最大長度的後視,儘管有一個最大長度

Exception in thread "main" java.util.regex.PatternSyntaxException: 
Look-behind group does not have an obvious maximum length near index 33 
    (?<!([A-Z]{0,100}\W{0,100}){0,100})[A-Z]{2,}(?!([A-Z]+\W+)+) 
+0

正如消息所述,這並不明顯。 –

回答

0

您還在使用您的回顧後可變長度匹配,因此是無效的。正如您寫的那樣,[A-Z]{0,100}將匹配0到100個字符,這與使用[A-Z]*的效果相同,匹配字符的上限。

+0

但是錯誤指出'Look-behind組沒有明顯的最大長度,我們知道它不會超過'(100 + 100)* 100',因此現在應該知道最大長度。 – Pshemo

+0

@willOEM我與Pshemo在這一個。正則表達式引擎應該能夠根據我對模式的定義計算最大長度,這就是爲什麼我很困惑。我從http://www.regular-expressions.info/lookaround.html –

+1

中讀取「[with java]」,可以使用帶有指定的最大參數的問號和大括號。「*」和「+」仍然是以與大括號相同的方式實施。看看這裏的答案:http://stackoverflow.com/questions/1536915/regex-look-behind-without-obvious-maximum-length-in-java – woemler