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}))