如何在正则表达式的第一场比赛后返回? (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;
}
在我的方法中。
我只希望匹配器首先搜索字符串并返回。
感谢
答案 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;
}