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

在Java中使用regexp验证字符串是否包含模式,java,regex,Java,Regex,简单的问题。如果我需要检查一个Regexp是否包含一个简单的模式,在我的例子中,如果我这样写的话,它将是^0039: if(Pattern.matches("^(0039|\\+39)", "00392121")) System.out.println("Yes"); else System.out.println("No"); 我的答案显然是No,因为模式缺少2121。我是否需要转换^(0039 |\\+39.*中的模式,或者有更适合的方法吗 我这样问是因为我正在为我们的ET

简单的问题。如果我需要检查一个Regexp是否包含一个简单的模式,在我的例子中,如果我这样写的话,它将是
^0039

    if(Pattern.matches("^(0039|\\+39)", "00392121")) System.out.println("Yes");
    else System.out.println("No");
我的答案显然是
No
,因为模式缺少
2121
。我是否需要转换
^(0039 |\\+39.*
中的模式,或者有更适合的方法吗

我这样问是因为我正在为我们的ETL引擎编写一个方法,我不确定每个使用这个方法的人是否都知道regexp是如何工作的……所以我预见了很多抱怨的电子邮件,并给出了一个明显的答案:“将。*附加到您的regexp”*

字符串.matches()如果正则表达式与整个字符串匹配,则方法返回
true


因此,是的,您必须在末尾添加
*

我建议您使用以下方法:

注意:这将只查找模式的第一次出现,因为它以
^
开头


还要注意的是,这可以归结为:

Pattern.compile(regex).matcher(input).matches()
这就叫。根据API,它与整个输入匹配:

matches方法尝试根据模式匹配整个输入序列


对于这种特殊情况,我不使用regexp,而是使用String

特别是如果你不确定每个使用它的人都知道regexp是如何工作的

Pattern.compile(regex).matcher(input).matches()