java - 正则表达式优化 - 在 Java 中转义&符号

标签 java regex optimization

我需要替换不属于 HTML 实体的字符串中的所有 &。这样字符串 "This & entites > & <"将返回 "This & entites > & < ;

我想出了这个正则表达式模式:“&[a-zA-Z0-9]{2,7};”,效果很好。 但我对正则表达式不是很熟练,当我测试超过 100k 次迭代的速度时,它使用的时间是以前使用的方法的两倍,没有使用正则表达式。 (但也没有 100% 地工作)。

测试代码:

long time = System.currentTimeMillis();
String reg = "&(?!&#?[a-zA-Z0-9]{2,7};)";
String s="a regex test 1 & 2  1&2 and &_gt; - &_lt;"
for (int i = 0; i < 100000; i++) {test=s.replaceAll(reg, "&amp;");}
System.out.println("Finished in:" + (System.currentTimeMillis() - time) + " milliseconds");

所以问题是是否有一些明显的方法可以优化此正则表达式以使其更有效?

最佳答案

s.replaceAll(reg, "&") 每次都在编译正则表达式。编译模式一次将提供一些性能提升(在这种情况下约为 30%)。

long time = System.currentTimeMillis();
String reg = "&(?!&#?[a-zA-Z0-9]{2,7};)";
Pattern p = Pattern.compile(reg);
String s="a regex test 1 & 2  1&2 and &_gt; - &_lt;";
for (int i = 0; i < 100000; i++) {
    String test = p.matcher(s).replaceAll("&amp;");
}
System.out.println("Finished in:" + 
             (System.currentTimeMillis() - time) + " milliseconds");

关于java - 正则表达式优化 - 在 Java 中转义&符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/848231/

相关文章:

java - Eclipse 在组织导入时用 StricAssertions 替换 Assertions

java - 需要在 camel Talend 中动态创建 SQL 语句

php - preg_match 匹配扩展名为 .jpg/.png 的文件

python - 无法使用正则表达式解析sqlite查询

optimization - JPEG 优化工具?

c# - 使用 Convert.ToDecimal() 会导致 C# 中的值四舍五入。如何克服这个问题?

java - 基于 JBoss 表单的身份验证失败

java - 在 Eclipse 中全局抑制警告类型

java - 如何使用 glob 验证我的 REFERER URL?

mysql - 优化两个大表上的简单查询