java - 如何快速将长字符串与正则表达式匹配?

标签 java regex

我有这个正则表达式 "((\\-)?[0-9]+(.([0-9])+)? )+" 应该匹配每个数字序列由一个空格分隔。例如“5 4 1 2 2.4 3 7.8”或“5 4 1 2 2.4 8.001 7.8”。

为了检查字符串是否与我做的正则表达式匹配:

if((value+" ").matches("((\\-)?[0-9]+(.([0-9])+)? )+")){
    // anything
}

问题是,当我像上面的例子一样给出这个小字符串时,它会很完美。但对于较长的字符串,如:“2000000 2000000 2000000 2000000 2000000 2000000 2000000 2000000”,如果匹配则完美,但如果不匹配则最多需要 5 秒。检查这个:

String value = "2000000 2000000 2000000 2000000 2000000 2000000 2000000 2000000 h";

System.out.println("Start: "+System.currentTimeMillis());
if((value+" ").matches("((\\-)?[0-9]+(.([0-9])+)? )+")){
    System.out.println("OK");
}else{
    System.out.println("NOK");
}
System.out.println("End: "+System.currentTimeMillis());

这最多需要 5 秒!!而如果您从字符串末尾删除“h”,则需要不到 1 毫秒。

有什么想法吗?

最佳答案

我怀疑如果将上面的内容拆分为数字序列(通过拆分空格),然后对每个子字符串应用更简单的正则表达式,性能会好得多

关于java - 如何快速将长字符串与正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13582281/

相关文章:

java - 通过 Spring JDBC 流式传输数据,长度未知

python正则表达式应用引擎

python - 这样的正则表达式哪里错了?

正则表达式不够贪婪

java - 在 Java 中实现 friend (在 C++ 中可用)功能

java - EntityClass 中的 LocalDate 扰乱了 sonarQube

正则表达式:加号不符合我的预期

Python正则表达式替换单个换行符并忽略两个或多个换行符的序列

java - Firebase 应用分发 url 返回 404 错误

java - Spring Web应用程序注释驱动 - 如何配置? (最佳实践)