替换标签内的字符串?

时间:2012-06-21 12:42:40

标签: java regex

我想替换某些标签内的内容,例如:

<p>this it to be replaced</p>

我可以在这样的群组之间提取内容,但我能否真正取代群组?

str = str.replaceAll("<p>([^<]*)</p>", "replacement");

2 个答案:

答案 0 :(得分:10)

您可以使用lookaround(正向前瞻和后瞻):

将正则表达式更改为:"(?<=<p>)(.*?)(?=</p>)",您将没事。


实施例

String str = "<p>this it to be replaced</p>";
System.out.println(str.replaceAll("(?<=<p>)(.*?)(?=</p>)", "replacement"));

输出:

<p>replacement</p>

但是请注意,如果您正在解析HTML,那么您应该使用某种HTML解析器,通常正则表达式不够好......

答案 1 :(得分:8)

将正则表达式更改为:

(?<=<p>).*?(?=</p>)

str = str.replaceAll("(?<=<p>).*?(?=</p>)", "replacement");

这使用“后视”和“向前看”来在匹配(非贪婪)正则表达式之前/之后断言但不捕获输入

万一有人想知道,这个答案与dacwe不同:他使用不必要的括号。这个答案更优雅:)