简单的问题。如果我需要检查Regexp是否包含一个简单的模式,在我的情况下它将是^0039
,如果我写这样的东西:
if(Pattern.matches("^(0039|\\+39)", "00392121")) System.out.println("Yes");
else System.out.println("No");
我的答案显然是No
,因为该模式缺少2121
。我是否需要在^(0039|\\+39).*
中转换模式,或者是否有更适合此方法的方法?
我问,因为我正在为我们的ETL引擎编写方法,我不确定每个使用它的人都知道regexp是如何工作的...所以我预见到很多抱怨的电子邮件有一个明显的答案:“追加。 *到您的正则表达式”*
答案 0 :(得分:2)
我建议你使用Matcher.find
方法:
public static void main(String[] args) {
Matcher m = Pattern.compile("^(0039|\\+39)").matcher("00392121");
if (m.find())
System.out.println("Found");
}
注意:这只会找到第一次出现的模式,因为它以^
开头。
另请注意,Pattern.matches(regex, input)
归结为:
Pattern.compile(regex).matcher(input).matches()
哪个电话Matcher.matches
。根据API,它与整个输入相匹配:
matches方法尝试将整个输入序列与模式匹配。
答案 1 :(得分:1)
如果正则表达式与整个字符串匹配,则String.matches()
方法返回true
。
所以是的,你必须在最后添加.*
。
答案 2 :(得分:0)
对于这种特殊情况,我不会使用regexp而是使用String的startsWith(String prefix, int toffset)代替。
特别是如果你不确定每个使用它的人都会知道regexp的工作原理。