我正在尝试用表达式替换html字体标记之间的所有字符。我写了一个小测试程序,但它没有正常工作。这是我的正则表达式:
test.replaceAll("<font\b(.*)>", "Something");
这不起作用。
为什么?
答案 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");
这具有相同的效果并避免回溯,这应该可以提高性能。