使用replace()或replaceall()

时间:2012-01-02 15:18:24

标签: java regex

我知道使用它:

public String RemoveTag(String html){
    html = html.replaceAll("\\<.*?>","");
    html = html.replaceAll("&nbsp;","");
    html = html.replaceAll("&amp;","");
    return html;
}

这将删除html字符串中的所有标记。但问题是如何在<.*?>之间获得一个狂野的字符。有人可以给我一个关于如何在String中获取狂野角色的更详细的解释。

这样做的主要原因是我仍然有这个字符“在起点处有一个@并且在终点处有一个”,我希望摆脱"@""}"之间的所有内容

2 个答案:

答案 0 :(得分:2)

正则表达式可以通过构建finite automaton来实现,因为每个正则表达式都有一个有限的确定性自动机,反之亦然。

如果您想要保留这些字符,那么您所寻求的正则表达式为@.*?}:您可以将其替换为"@}"而不是""。它将类似于:s.replaceAll("@.*?}", "@}") [s是你的字符串]。

看起来你可能需要正则表达式“@。*?\}”,尽管模式识别器在看不到前面的}时应该忽略特殊的{字符。为了安全起见:"@.*?\\}"应该以@WayneBaylor发布的方式工作。

您可能需要阅读more on regular expressions

答案 1 :(得分:2)

replaceAll(...)的第一个参数是正则表达式字符串。示例中的.*?是匹配任何内容的部分。所以,如果你想要一个能够摆脱“@”和“}”之间所有东西的正则表达式,你会使用类似的东西:

String exampleText = "Start @some text} finish.";
exampleText.replaceAll("@(.*?)\\}", "@}");
System.out.println(exampleText); // prints "Start @} finish."

注意相同的模式:.*?。括号,这里是可选的,仅用于分组。另请注意}使用反斜杠进行转义,因为它在正则表达式中具有特殊含义。

有关Java正则表达式支持的更多信息,请参阅Pattern class