我正在尝试改善正则表达式。
我有这个字符串:
String myString =
"stuffIDontWant$KEYWORD$stuffIWant$stuffIWant$KEYWORD$stuffIDontWant";
我这样做是为了只减去我想要的东西:
String regex = "\\$KEYWORD\\$.+\\$.+\\$KEYWORD\\$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(myString);
if(m.find()){
String result = stuff.substring(m.start(), m.end());
}
目标是获取
stuffIWant$stuffIWant
,然后将其与字符$
分开,因此,为改进它并避免将Patter和Matcher导入我的Java源代码,我了解了环顾四周的方法,因此,第二种方法是://Deletes what matches regex
myString.replaceAll(regex, "");
// Does nothing, and i thought it was just the opposite of the above instruction.
myString.replaceAll("(?! "+regex+")", "");
正确的方法是什么,我的概念在哪里错误?
最佳答案
你到那儿了!但是大多数将使用捕获组。
\\$KEYWORD\\$(.+)\\$(.+)\\$KEYWORD\\$
^ ^ ^ ^
这些括号将存储它们包含的内容,即捕获的内容。第一组将被索引为1,第二组将被索引为2。您可以使用上面的表达式进行尝试,以查看发生了什么。
if (m.find()) {
int count = m.groupCount();
for (int i=0; i<count; i++) {
System.out.println(m.group(i));
}
}
也可以通过环视解决,但不必要:
(?<=\\$KEYWORD\\$).+?\\$.+?(?=\\$KEYWORD\\$)
^^^^ ^ ^ ^^^^ ^