为德国移动号码优化正则表达式



我有一个从网站提取德国手机号码的正则表达式:

[^d]((+49|0049|0)1[567]d{1,2}([ -/]*d){7})(?!d)

正如你在演示中看到的,它工作得很好。唯一不匹配的模式是:

+49 915175461907

请在链接的演示中查看更多示例。问题是+49后面的空白。

我需要如何改变当前的正则表达式模式,以匹配甚至这些类型的模式?

一个更好的正则表达式是:

(?<!d)(?:+49|0049|0) *[19][1567]d{1,2}(?:[ /-]*d){7,8}(?!d)

更新的RegEx Demo

变化:

  • (?<!d):确保前一个字符不是数字
  • [19][1567]:匹配19后面的[1567]
  • {7,8}:匹配给定结构的7或8个重复
  • 最好在字符类的第一个或最后一个位置保留一个未转义的连字符
  • 使用非捕获组
  • 避免捕获不需要的文本

无脑方法:删除regex前的空格

否则在正则表达式中与空格匹配的non是s so(可能括号太多)

[^d](((+49|0049|0)([s]{0,1})1)[567]d{1,2}([ -/]*d){7})(?!d)

添加可选空白:

[^d]((+49|0049|0)s?(1|9)[1567]d{1,2}([ -/]*d){7,8})(?!d)

更新捕获行起始

如果你想匹配数字,而不必以换行符开始,你可以使用这个。它匹配除了电话号码前的数字以外的任何内容:

(^|[^d])((+49|0049|0)s?(1|9)[1567]d{1,2}([ -/]*d){7,8})(?!d)

test it here

相关内容

  • 没有找到相关文章

最新更新