在Java中使用regex验证字符串是否包含模式

时间:2012-03-06 11:16:45

标签: java regex

简单的问题。如果我需要检查Regexp是否包含一个简单的模式,在我的情况下它将是^0039,如果我写这样的东西:

    if(Pattern.matches("^(0039|\\+39)", "00392121")) System.out.println("Yes");
    else System.out.println("No");

我的答案显然是No,因为该模式缺少2121。我是否需要在^(0039|\\+39).*中转换模式,或者是否有更适合此方法的方法?

我问,因为我正在为我们的ETL引擎编写方法,我不确定每个使用它的人都知道regexp是如何工作的...所以我预见到很多抱怨的电子邮件有一个明显的答案:“追加。 *到您的正则表达式”*

3 个答案:

答案 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的工作原理。