我有这个字符串:
+1(333)456-7890
我希望将它与正则表达式匹配。这就是我现在的正则表达式:
Pattern p1 = Pattern.compile("((\\+{0,}[0-9]{0,3}( |-)?)?)(\\(?[0-9]
{3}\\)?|[0-9]{3}( |-)?)([0-9]{3}( |-)?)([0-9]{4}|[a-zA-Z0-9]{7})");
应该识别中间有潜在破折号或空格的任何电话号码模式,可能是至少10位数(或字母),没有国家代码,最多13位数字带国家代码。
我的模式似乎与某些案例相匹配,而不是像之前所说的那样。我真的很难过,任何帮助都会受到赞赏。
答案 0 :(得分:2)
你的正则表达式似乎过于复杂,这就是为什么它可能会在某个地方出现故障。我试图遵循它,但最后更容易阅读你的定义并从头开始构建一个新定义:
(\+\d{1,3}[- ]*)?(\(?\d\d\d\)?)[- ]*(\d\d\d[- ]?\d\d\d\d|[a-zA-Z0-9]{7})
这符合以下测试用例:
+1(333)456-7890
+ 1-(212)555-0198
+1 212 555-0198
+1 212-ILOVEUU
根据您自己的测试用例,这可能就足够了。或者不是。
(\+\d{1,3}[- ]*)? // Optional +xxx international prefix plus dash/space
(\(?\d\d\d\)?)[- ]* // three-digit area code with optional parens
(\d\d\d[- ]?\d\d\d\d| // Either 7 digits, with optional dash
[a-zA-Z0-9]{7}) // or 7 letters/digits