java - 使用大数据进行测试时,正则表达式需要花费大量时间

标签 java regex

我创建了一个java正则表达式

(?=\b((?<![^\p{Alnum}\p{Punct}])(?:\p{Alnum}+\p{Punct}\p{Alnum}+){2})\b)

我针对示例字符串测试了此正则表达式:https://www.google.com.google.com

它给了我所有预期的 token :

www.google.com google.com.google com.google.com

但是,上述正则表达式的问题是,在使用大字符串进行测试时需要花费大量时间。

我期望的标记采用“字母数字标点符号字母数字”的形式。

如何优化这个正则表达式?

最佳答案

您需要像这样简化正则表达式:

(?=\b((?:\p{Alnum}+\p{Punct}){2}\p{Alnum}+)\b)

请参阅regex demo .

详细信息:

  • \b - 单词边界
  • ((?:\p{Alnum}+\p{Punct}){2}\p{Alnum}+) - 第 1 组:
    • (?:\p{Alnum}+\p{Punct}){2} - 出现两次一个或多个字母/数字和一个标点符号,然后
    • \p{Alnum}+ - 一个或多个字母/数字
  • \b - 单词边界

请注意,每个后续模式在字符串内的同一位置都不匹配,这使得它尽可能高效(尽管如此,重叠模式的性能并不是那么好,因为它们必须评估字符串内的每个位置,从从左到右)。

关于java - 使用大数据进行测试时,正则表达式需要花费大量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72402371/

相关文章:

java - 正则表达式匹配第一个新行后跟不间断空格字符

java - 为什么这个 Java 正则表达式不起作用?

regex - Perl 中的相等字符串不相等

java - 求一组方程的整数解,其中未知数多于方程

java - JFrame GridBagLayout 组件定位

java - 无法通过 tomcat 中的 websocket 发送二进制消息,但可以在 glassfish 中使用。在 tomcat 中失败并出现 IllegalArgumentException

python unicode正则表达式

java - 根据jsp形式创建对象

java - Spring Roo 仅用于制作网站的骨架吗?

python - 在数据框中查找具有日期模式的所有列