我有一个很长的字符串。我想用匹配的正则表达式(组)的一部分替换所有匹配。
例如:
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);
答案 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;太