Java正则表达式电话号码

我提供以下正则表达式:^((?:\ + 27 | 27)| 0)(\ d {9})$表示南非的数量,并希望仅对以+27或27开头的数字返回true或者0.例如; +27832227765,27838776654或0612323434。

我尝试使用: regexplanet.com

和正则表达式测试

但无论我输入什么(即使是简单的正则表达式),两者都会返回false。

谁知道我做错了什么?

在Java代码中,您需要加倍反斜杠,并且在在线测试器中,反斜杠必须是单个的。

此外,如果与String#matches一起使用,则不必使用字符串标记的开始和结束,因为此方法需要完整的字符串匹配。

以下是您的Java代码的外观:

 String rex = "(\\+?27|0)(\\d{9})"; System.out.println("+27832227765".matches(rex)); // => true System.out.println("27838776654".matches(rex)); // => true System.out.println("0612323434".matches(rex)); // => true 

请参阅IDEONE演示

如果使用String#find ,则需要原始正则表达式中的^$锚点。

注意我将((?:\+27|27)|0)缩短为(\+?27|0)? 量词表示1或0次出现 。 额外的分组在这里真的是多余的。 此外,如果您没有使用捕获的文本,我建议将第一组转换为非捕获(即(?:\+?27|0) )并从\d{9}删除圆括号:

 String rex = "(?:\\+?27|0)\\d{9}"; 

这是在http://tools.netshiftmedia.com/regexlibrary/#上测试的表达式,用于以+27或27或0开头且长度为9的数字。

 ^((0)|(27)|(\+27))(\d{9})$ 

你的号码还可以:

在此处输入图像描述

这应该工作,这是一个变种 。 (我为此示例删除了^和$):

 ((?:\+27|27|0)(?:\d{9}))