为什么这些正则表达式在Java中执行缓慢?

Mar*_*boe 6 java regex performance pattern-matching

我正在尝试使用正则表达式来确定用户在文本框中输入输入时应用的格式.
正则表达式如下:

(\\s?[" + alphabet + "]{9,9})+
Run Code Online (Sandbox Code Playgroud)

确定输入是否是给定字母表中长度为9的一个或多个字符串,可能由空格分隔.

(>[\\w\\s]+\\n[" + alphabet + "\\s]+)+
Run Code Online (Sandbox Code Playgroud)

检查输入是否为FASTA格式

匹配时,正则表达式运行速度非常慢inputString.matches(regexString).为什么是这样?

我想这可能是因为Java存储了所有可能的匹配(此时我不需要),但是?:在每个括号中添加会破坏正则表达式.该怎么做?

谢谢,

马丁

编辑1:我无法重现此问题 - 它只发生在一台计算机上.这可能表明该特定VM设置有问题.
我们需要更强大的东西,因此我们将以不同的方式实现这一点.我选择Joel的答案是正确的,因为我相信Pattern中的一些特殊情况可能是原因.

Joe*_*off 0

如果您有许多不同的正则表达式模式与相同的输入进行匹配以尝试对输入进行分类,那么您可能最好使用像JFlex这样的词法分析器生成器。

此处列出了编译器构建中通常使用的其他基于 Java 的词法分析器和解析工具。