make .replaceFirst()在特定字符后启动

时间:2015-03-23 09:41:05

标签: java regex

我有什么方法可以让.replaceFirst()开始只替换一个特定的字符串之后?例如我知道正则表达式不能很好地使用html,我有html文本,由1 h2头和一个段落组成。 现在使用我的软件替换的关键字完美无缺,但有时关键字也会在标题中被替换。有没有办法让java知道在第一次

之后开始raplacing
</h2>

的字符串?

1 个答案:

答案 0 :(得分:1)

如果你想要一个正则表达式解决方案(如果你使用replaceFirst()replaceAll()没有任何区别),我建议使用捕获组:

(?s)(<\/h2.+)\b(keyword)\b(?=.*<\/h2>.*$)

 String regex = "(?s)(<\\/h2.+)\\b(keyword)\\b(?=.*<\\/h2>.*$)";

将“keyword”替换为您的单词,并使用“$ 1 [replacement_keyword]”作为替换字符串。

这是code example

String input = "<title>Replacing keywords with keyword</title>\n"+
               "<body>\n"+
               "<h2>Titles</h2>\n"+
               "<p>Par with keywords and keyword</p>\n"+
               "<h2>Titles</h2>\n"+
               "<p>Par with keywords and keyword</p>\n"+
               "</body>";
String regex = "(?s)(<\\/h2.+)\\b(keyword)\\b(?=.*<\\/h2>.*$)";
String keytoreplacewith = "NEW_COOL_KEYWORD";
String output = input.replaceFirst(regex, "$1"+keytoreplacewith);
System.out.println(output);

输出:

<title>Replacing keywords with keyword</title>
<body>
<h2>Titles</h2>
<p>Par with keywords and NEW_COOL_KEYWORD</p>
<h2>Titles</h2>
<p>Par with keywords and keyword</p>
</body>