java - 有效的正则表达式?

标签 java regex

<分区>

我有这个字符串:

+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 位数字有国家代码。

我的模式似乎符合某些情况,而不符合其他情况,例如前面所述的情况。我真的很困惑,我们将不胜感激。

最佳答案

您的正则表达式似乎过于复杂,这就是它可能在某处中断的原因。我尝试遵循它,但最终更容易阅读您的定义并从头开始构建一个新定义:

(\+\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

关于java - 有效的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40552679/

相关文章:

java - 期待 JUnit 的异常不起作用

java - 有没有一种简单的方法来分析 eclipse 中的 java 程序?

java - 如何将枚举类型存储为小写字符串?

javascript - 正则表达式将 & 转换为 &

RegEx 所有不包含字符串的 URL

java - Integer.valueOf 不适用于 Java 中 -1 的二进制表示

java - 在 groovy 中使用 JAXB 解码对 java POJO 的 SOAP 响应

java - 在java中表示字符串中的自定义属性

regex - 正则表达式匹配一个数字后跟一个重复多次的符号?

python - 正则表达式 - 选择单引号之间的表达式