繁体   English   中英

Java正则表达式帮助

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM