java正则表达式帮助

时间:2011-04-14 21:08:18

标签: java regex

我正在尝试用表达式替换html字体标记之间的所有字符。我写了一个小测试程序,但它没有正常工作。这是我的正则表达式:

test.replaceAll("<font\b(.*)>", "Something");

这不起作用。

为什么?

2 个答案:

答案 0 :(得分:5)

请注意,*运算符为greedy,即

String test = "<font size=\"10\"><b>hello</b></font>";
System.out.println(test.replaceAll("<font\\b(.*)>", "Something"));

打印

Something

您可能想要使用[^>]*

test.replaceAll("<font\\b([^>]*)>", "Something")

不情愿的量词*?

test.replaceAll("<font\\b(.*?)>", "Something")

两者都导致

Something<b>hello</b></font>

答案 1 :(得分:2)

你可能想要在“b”之前加上两个“\”:

test.replaceAll("<font\\b(.*)>", "Something");

你需要这个,因为正则表达式是一个字符串,反斜杠需要在字符串中进行转义。

要使其仅匹配第一个“&gt;”,请执行以下操作:

test.replaceAll("<font\\b(.*?)>", "Something");

这会使*“懒惰”,以便尽可能少地匹配而不是尽可能多。

但是,似乎最好按如下方式编写此特定表达式:

test.replaceAll("<font\\b([^>]*)>", "Something");

这具有相同的效果并避免回溯,这应该可以提高性能。