首次匹配后Java正则表达式返回

时间:2011-01-09 04:44:06

标签: java regex

如何在正则表达式的第一场比赛后返回? (Matcher.find()方法可以做到吗?)

说我有一个字符串" abcdefgeee"。我想问一下正则表达式引擎在找到" e"的第一个匹配后立即停止查找。例如。如果找到模式并且我不想找到" e"的整个字符串,我正在编写一个返回true / false的方法。 (我正在寻找正则表达式解决方案)

另一个问题,有时当我使用match()时,它没有正确返回。例如,如果我编译我的模式,如" [a-z]"。然后使用matches(),它不匹配。但是当我将模式编译为".*[a-z].*"时,它匹配....是Matcher类的matches()方法的行为吗?

编辑,这就是我想要做的事情。例如,我想在字符串中搜索$符号和@符号。所以我会定义2个编译模式(因为我知道基础知识,因此我无法找到正则表达式的任何逻辑AND)。

pattern1 = Pattern.compiled("$");
pattern2 = Pattern.compiled("@");

然后我会使用

if ( match1.find() && match2.find()  ){
  return true;
}

在我的方法中。

我只希望匹配器首先搜索字符串并返回。

感谢

2 个答案:

答案 0 :(得分:2)

对于第二个问题,匹配确实有效,您的示例使用两个不同的正则表达式。

.*[a-z].*将匹配至少包含一个字符的String。 [a-z]只匹配小写a-z的一个字符字符串。我想你可能想要使用像[a-z]+

这样的东西

答案 1 :(得分:1)

  

另一个问题,有时当我使用match()时,它不能正确返回。例如,如果我编译我的模式,如“[a-z]”。然后使用matches(),它不匹配。但是当我将模式编译为“。 [a-z]。”时,它匹配....是Matcher类的matches()方法的行为吗?

是的,matches(...)测试整个目标字符串。

  

......这就是我想要做的事情。例如,我想在字符串中搜索$符号和@符号。所以我会定义2个编译模式(因为我知道基础知识时找不到正则表达式的任何逻辑AND)。

我知道你说你想使用正则表达式,但你所有的例子似乎都暗示你不需要它们:这些都是可以通过几个indexOf(...)调用来处理的单个字符。

无论如何,使用正则表达式,你可以这样做:

public static boolean containsAll(String text, String... patterns) {
    for(String p : patterns) {
        Matcher m = Pattern.compile(p).matcher(text);
        if(!m.find()) return false;
    }
    return true;
}

但是,再次:indexOf(...)也可以做到这一点:

public static boolean containsAll(String text, String... subStrings) {
    for(String s : subStrings) {
        if(text.indexOf(s) < 0) return false;
    }
    return true;
}