Java regex matcher.find 偶尔会失败

标签 java regex

我有 regexp 解析模板中使用的 freemarker 宏的所有名称(例如来自 <@macroName /> 我只需要 macroName )。模板通常非常大(大约 3 万个字符)。 带有正则表达式的 Java 代码如下所示:

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)
...

有谁知道为什么会发生这种情况,或者有人可以确定我使用的正则表达式是否经过优化? 谢谢

最佳答案

对于 <@macro macroName />您的正则表达式看起来有点复杂。要么有一些事情(特殊情况)<@macro macroName />不要描述,或者正则表达式太用力了。尝试:

<@macro\s+(\S+)\s+/>

您现在应该在第 1 组中有了宏的名称。

关于Java regex matcher.find 偶尔会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10832521/

相关文章:

java - Hibernate 中的 PostgreSQL 网络类型

java - m2eclipse maven 构建参数

php - 允许 + 在正则表达式电子邮件中验证电子邮件

javascript regex - 查找由定界符括起来的子字符串

java - 字符串不相等

java - 在 java 中列出文件时实现超时

c# - 正则表达式 : finding multiple matches for a single asterisked group

regex - Perl 正则表达式在相同情况下替换

java - TestNG 默认情况下禁用从不安全的 URL 加载 DTD

javascript - 如何从正则表达式匹配函数中获取匹配的组?