我有正則表達式,它解析模板中使用的freemarker宏的所有名稱(例如從<@macroName />
我只需要macroName
)。模板通常非常大(3萬個字符)。 用正則表達式的Java代碼如下所示:Java的正則表達式matcher.find偶爾會失敗
Pattern pattern = Pattern.compile(".*?<@(.*?)[ /].*?",
Pattern.DOTALL | Pattern.UNIX_LINES);
Matcher matcher = pattern.matcher(inputText);
while(matcher.find()){
//... some code
}
但有時會發生,我得到這個異常:
java.util.regex.Pattern$Curly.match1(Pattern.java:3814)
java.util.regex.Pattern$Curly.match(Pattern.java:3763)
java.util.regex.Pattern$Start.match(Pattern.java:3072)
java.util.regex.Matcher.search(Matcher.java:1116)
java.util.regex.Matcher.find(Matcher.java:552)
...
是否有人知道爲什麼會發生或可能有人讓我知道,如果正則表達式我使用已經優化好了嗎? 謝謝
什麼是異常(和消息)?你只發布堆棧跟蹤 –
我甚至感到驚訝,你的正則表達式匹配任何你需要的東西。其中有很多問題,從重複使用'。*?'到'[/]'開始,這不符合你的想法。我建議你看看Jeffrey Friedl和http://regex.info。 – dda