我提供以下正则表达式:^((?:\ + 27 | 27)| 0)(\ d {9})$ 对于南非的数量,并希望仅对以+27或27或0开头的数字返回true。例如; +27832227765,27838776654或0612323434。
我尝试过使用: regexplanet.com
但无论我输入什么(即使是简单的正则表达式),两者都会返回false。
有人知道我做错了吗?
答案 0 :(得分:3)
在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 demo
如果您使用String#find
,则需要原始正则表达式中的^
和$
个锚点。
注意我将((?:\+27|27)|0)
缩短为(\+?27|0)
,因为?
量词意味着 1或0次出现。额外的分组在这里真的是多余的。此外,如果您没有使用捕获的文本,我建议将第一组转为非捕获(即(?:\+?27|0)
)并从\d{9}
中删除圆括号:
String rex = "(?:\\+?27|0)\\d{9}";
答案 1 :(得分:1)
这是在http://tools.netshiftmedia.com/regexlibrary/#上测试的表达式,用于以+27或27或0开头且长度为9的数字。
^((0)|(27)|(\+27))(\d{9})$
您的号码没问题:
答案 2 :(得分:0)
这应该有用,这里是variant。 (我为此示例删除了^和$):
((?:\+27|27|0)(?:\d{9}))