【发布时间】:2011-03-08 20:10:15
【问题描述】:
我正在尝试使用正则表达式来确定用户在文本框中输入输入时应用的格式。
正则表达式如下:
(\\s?[" + alphabet + "]{9,9})+
确定输入是否是给定字母表中长度为 9 的一个或多个字符串,可能由空格分隔。
(>[\\w\\s]+\\n[" + alphabet + "\\s]+)+
检查输入是否在FASTA format中
与inputString.matches(regexString) 匹配时,正则表达式运行得非常慢。这是为什么呢?
我认为这可能是由于 Java 存储了所有潜在的匹配项(此时我不需要),但在每个括号中添加 ?: 会破坏正则表达式。这应该怎么做?
谢谢,
马丁
编辑 1: 我无法重现此问题 - 它只发生在一台计算机上。这可能表明该特定 VM 设置存在问题。
我们需要更强大的东西,因此我们将以不同的方式实现它。我选择 Joel 的答案是正确的,因为我相信 Pattern 中的一些特殊情况可能是原因。
【问题讨论】:
-
您可能尝试与每个输入字符串匹配多少种模式?模式是动态的还是静态的?
-
@Joel 只有这两种模式。它们是静态的。使用 String.matches 每次都会导致编译,但即使是一次匹配模式也需要很长时间(> 10s 大约 300 个字符输入)
-
你能定义“非常慢”吗?
-
@matt 在我的机器(Intel i7 @ 2.67 GHz)上匹配长度为 300 的输入字符串需要超过 10 秒
-
请发布一个独立的程序,我们可以运行它来看看这种情况发生!
标签: java regex performance pattern-matching