在块注释中使用Java RegEx查找和替换模式

时间:2011-11-25 10:04:13

标签: java regex

这是用于查找块注释的正则表达式,它可以正常工作

/\\*(?>(?:(?>[^*]+)|\\*(?!/))*)\\*/

我只需稍微修改一下。找到块注释中“可能”存在的分号(;)并用空格替换它。

目前我正在这样做

while (m.find()) {
    if (m.group().contains(";")) {
        replacement = m.group().replaceAll(";", "");
        m.appendReplacement(sb, replacement);
    }
}
m.appendTail(sb);

但我需要用str.replaceAll类型的语句替换它。简而言之,因为我的内存异常,所以效率更高。我修复了一些用于抛出相同异常的其他正则表达式并且它们正常工作。我希望这个正则表达式也可以优化。

---编辑---

这些是您可以在

上测试此正则表达式的字符串
/* this* is a ;*comment ; */

/* This ; is* 
another
;*block
comment;
;*/

由于

2 个答案:

答案 0 :(得分:3)

使用(?s)/\*.+?\*/ regexp非常简单。在你的表达中,你使用消极的前瞻来“吃掉”你的记忆。 你的代码可能更简单:

while (m.find()) {
    m.appendReplacement(sb, m.group().replace(";","");
}
m.appendTail(sb);

答案 1 :(得分:0)

有两种变体(同时尝试):

1)。你为什么使用?>?我不知道这意味着什么,我认为不需要像?>那样使用特殊的东西。将其更改为?:

2)。你的循环是无限的。 你需要这个:

    int index = 0;
    while (m.find(index)) {
        if (m.group().contains(";")) {
            replacement = m.group().replaceAll(";", "");
            m.appendReplacement(sb, replacement);
        }
        index = m.end();
    }