【发布时间】:2016-04-24 05:06:47
【问题描述】:
代码:
public static void main(String[] args) {
String mainTag = "HI";
String replaceTag = "667";
String text = "92<HI=/><z==//HIb><cHIhi> ";
System.out.println(strFormatted(mainTag, replaceTag, text));
mainTag = "aBc";
replaceTag = "923";
text = "<dont replacethis>abcabc< abcabcde >";
System.out.println(strFormatted(mainTag, replaceTag, text));
}
private static String strFormatted(String mainTag, String replaceTag, String text) {
return text.replaceAll("(?i)(?<=<)" + mainTag + "(?=.*>)", replaceTag);
}
所以,我想将mainTag(变量)替换为replaceTag(变量)仅在标签内(<...>)。
在上面的示例中,我想用667 替换所有inside <...> 中的mainTag HI(不区分大小写),但我的代码只替换了第一个出现。 p>
示例:
92<HI=/><z==//HIb><cHIhi>
预期输出:
92<667=/><z==//667b><c667667>
(mainTag = "HI", replaceTag = "667")
<dont replacethis>abcabc<abcabcde>
预期输出:
<dont replacethis>abcabc<923923de>
(mainTag = "aBc", replaceTag = "923");
注意:我的代码是错误的,不仅因为他只替换了 1 次,还因为它只有在“mainTag”成功于“
【问题讨论】:
-
尝试使用代码格式发布此内容(行首有四个空格或将代码包含在反引号中,即')。额外的 \s 使这变得难以理解。
-
您希望将
HIb的 hi 更改为667b,但不要将hi从replacethis更改为replacet667s.. -
@rock321987 我添加了更多代码和信息。
标签: java regex lookahead lookbehind