11

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

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

我可以提取这样的组之间的内容,但我真的可以替换组吗?

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

2 回答 2

9

您可以为此使用环视(积极的前瞻和后视):

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


例子:

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

输出:

<p>replacement</p>

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

于 2012-06-21T12:45:27.370 回答
8

将正则表达式更改为:

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

IE

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

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

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

于 2012-06-21T12:46:41.203 回答