12

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

例如:

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);
4

6 回答 6

15

该类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>");

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

于 2012-06-02T21:26:53.663 回答
9

像这样:

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

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

于 2012-06-02T21:21:05.497 回答
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>");
于 2012-06-02T21:27:59.010 回答
2
yourStr.replaceAll("(?i)([.>, ])(is)([.<, ])","$1<h1>$2</h1>$3")

(?i)表示忽略大小写;用括号包裹你想要重用的所有东西,用 $1 $2 和 $3 重用它们,将它们连接成你想要的东西。

于 2017-08-26T14:47:15.623 回答
0

只需为此使用反向引用。

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

于 2012-06-02T21:21:59.083 回答
0

这可能是一个较晚的添加,但如果有人正在寻找类似
搜索“东西”并且他也需要“某物”作为结果,那么

Pattern p = Pattern.compile("([^ ] )is([ ^ \.] )");
字符串结果 = m.replaceAll("<\h1>$1is$2</h1>");

也会产生 <\h1>Something</h1>

于 2018-03-02T09:14:01.993 回答