[英]java regular expression help
我试图用表达式替换html字体标签之间的所有字符。 我写了一个小测试程序,但是它不能正常工作。 这是我的正则表达式:
test.replaceAll("<font\b(.*)>", "Something");
这是行不通的。
为什么?
请注意, *
运算符是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>
您可能希望在“ b”之前有两个“ \\”:
test.replaceAll("<font\\b(.*)>", "Something");
您需要这样做,因为正则表达式是字符串,并且反斜杠需要在字符串中转义。
要使其仅与第一个“>”匹配,请执行以下操作:
test.replaceAll("<font\\b(.*?)>", "Something");
这使*
“惰性”,因此它匹配的越少越好。
但是,似乎最好按以下方式编写此特定表达式:
test.replaceAll("<font\\b([^>]*)>", "Something");
这具有相同的效果,避免了回溯,后者应提高性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.