用匹配的正则表达式的一部分替换字符串

时间:2012-06-02 21:12:17

标签: java regex

我有一个很长的字符串。我想用匹配的正则表达式(组)的一部分替换所有匹配。

例如:

String = "This is a great day, is it not? If there is something, THIS IS it. <b>is</b>".

我希望将所有单词"is"替换为"<h1>is</h1>"。案件应与原件保持一致。所以我想要的最后一个字符串是:

This <h1>is</h1> a great day, <h1>is</h1> it not? If there <h1>is</h1> something, 
THIS <h1>IS</h1> it. <b><h1>is</h1></b>.

我正在尝试的正则表达式:

Pattern pattern = Pattern.compile("[.>, ](is)[.<, ]", Pattern.CASE_INSENSITIVE);

6 个答案:

答案 0 :(得分:13)

Matcher类通常与Pattern一起使用。使用Matcher.replaceAll()方法替换字符串

中的所有匹配项
String str = "This is a great day...";
Pattern p = Pattern.compile("\\bis\\b", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(str);
String result = m.replaceAll("<h1>is</h1>");

注意:使用\b regex命令将匹配单词边界(如空格)。这有助于确保只匹配单词“is”而不包含字母“i”和“s”(如“island”)的单词。

答案 1 :(得分:5)

像这样:

str = str.replaceAll(yourRegex, "<h1>$1</h1>");

$1是指正则表达式中由组#1捕获的文本。

答案 2 :(得分:3)

迈克尔的答案更好,但如果你碰巧只想要[.>, ][.<, ]作为边界,你可以这样做:

String input = "This is a great day, is it not? If there is something, THIS IS it. <b>is</b>";
Pattern p = Pattern.compile("(?<=[.>, ])(is)(?=[.<, ])", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
String result = m.replaceAll("<h1>$1</h1>");

答案 3 :(得分:2)

yourStr.replaceAll("(?i)([.>, ])(is)([.<, ])","$1<h1>$2</h1>$3")

(?i)表示无视案件;用括号包装你想要重复使用的所有东西,用$ 1 $ 2和$ 3重复使用它们,将它们连接成你想要的东西。

答案 4 :(得分:0)

只需使用反向引用即可。

"This is a great day, is it not? If there is something, THIS IS it. <b>is</b>".replaceAll("[.>, ](is)[.<, ]", "<h1>$2</h1>");应该这样做。

答案 5 :(得分:0)

这可能是一个迟到的补充,但如果有人在寻找这样的话 搜索&#39;&#39; 并且他也需要&#39; Something&#39; 以作为结果,
    模式p = Pattern.compile(&#34;([^] )是([^ \。] )&#34;);
    字符串结果= m.replaceAll(&#34;&lt; \ h1&gt; $ 1是$ 2&lt; / h1&gt;&#34;);

结果&lt; \ h1&gt; Something&lt; / h1&gt;太

相关问题