0

我正在尝试改进正则表达式。

我有这个字符串:

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然后将其拆分为 character $,因此,为了改进它并避免将 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+")", ""); 

什么是正确的方法,我的概念在哪里错了?

4

1 回答 1

3

你快到了!但大多数会使用捕获组

\\$KEYWORD\\$(.+)\\$(.+)\\$KEYWORD\\$
             ^  ^   ^  ^

这些括号将存储它们所包含的内容,即capture。第一个集合的索引为 1,第二个集合的索引为 2。您可以使用上面的表达式尝试一下,看看发生了什么。

if (m.find()) {
    int count = m.groupCount();
    for (int i=0; i<count; i++) {
        System.out.println(m.group(i));
    }
} 

也可以通过环视来解决,但没有必要:

(?<=\\$KEYWORD\\$).+?\\$.+?(?=\\$KEYWORD\\$)
^^^^             ^  ^     ^^^^             ^
于 2012-07-10T18:48:51.097 回答