【发布时间】:2017-01-08 11:43:27
【问题描述】:
我整理了这个简化版本的代码来演示这个问题:
public static void main(String []args){
String content="1 [thing i want]\n" +
"2 [thing i dont want]\n" +
"3 [thing i dont want] [thing i want]\n" +
"4 // [thing i want]\n" +
"5 [thing i want] // [thing i want]\n";
String BASE_REGEX = "(?!//)\\[%s\\]";
Pattern myRegex = Pattern.compile(String.format(BASE_REGEX, "thing i want"));
Matcher m= myRegex.matcher(content);
System.out.println("match? "+m);
String newContent = m.replaceAll("best thing ever");
System.out.println("regex "+myRegex);
System.out.println("content:\n"+content);
System.out.println("new content:\n"+newContent);
}
我希望我的输出是:
new content:
1 best thing ever
2 [thing i dont want]
3 [thing i dont want] best thing ever
4 // [thing i want]
5 best thing ever // [thing i want]
但我明白了:
new content:
1 best thing ever
2 [thing i dont want]
3 [thing i dont want] best thing ever
4 // best thing ever
5 best thing ever // best thing ever
如何修复正则表达式?
未修改的字符串:
content:
1 [thing i want]
2 [thing i dont want]
3 [thing i dont want] [thing i want]
4 // [thing i want]
5 [thing i want] // [thing i want]
【问题讨论】:
-
(?!//)始终为真,因为下一个使用的字符是[。您似乎避免在单行 cmets 中替换,对吗?匹配那些 cmets,并且只替换其他上下文中的匹配项。 -
我看不出你想要的东西和不想要的东西之间的关系。您能否发布一个单独的字符串
content的文本块,如果打印出来的话? -
@sln 。我将其添加到原始问题中。
标签: java regex parsing comments regex-lookarounds