【问题标题】:Valid regex expression? [duplicate]有效的正则表达式? [复制]
【发布时间】:2016-11-11 16:54:37
【问题描述】:

我有这个字符串:

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

我的模式似乎与某些情况相匹配,而不是与前面所述的其他情况相匹配。我真的很难过,任何帮助将不胜感激。

【问题讨论】:

  • 这是在 Java 中吗?你应该谷歌,“在线可视化 Java 正则表达式测试器”或类似的东西。有很多在线工具可以帮助解决这个问题。
  • 不是我问的,但谢谢
  • 我想看看是否有人可以看一下它并了解它为什么不起作用
  • 我知道,您表示您的正则表达式有问题,尽管您没有问任何问题。 ;) 我只是提供了一个方便的工具,可以让你自己解决它。这只是一个建议。我确实在您的正则表达式上尝试了其中一个在线工具,它声称它有问题并引用了问题发生的位置。但是由于您不清楚您使用的是哪种语言,所以就目前而言。不同语言的正则表达式约定可能会有所不同。
  • 它在 java 中有关于如何修复它的任何想法吗?

标签: java regex


【解决方案1】:

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

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

【讨论】:

  • @SJackson193 Your regex seems overly complex...I tried to follow... 这是一个很大的信号,正则表达式可能不是这里的正确工具。
  • 并非总是如此。正则表达式的初学者通常非常擅长产生笨拙的怪物...... :-) 这并不总是工具的错。 OP 在他的正则表达式中显示出并不真正理解他在做什么的迹象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多