我写的这个正则表达式应该提取免费电话号码,但是当有一个像1-800-343-2432这样的号码时(当800之前有一个1时)它不起作用
(?!(\$|#|800|855|866|877|888))\(?[\\s.-]*([0-9]{3})?[\\s.-]*\)?[\\s.-]*[0-9]{3}[\\s.-]*[0-9]{4}
我怎样才能修改这个表达式而不是像1-866-343-1232这样的数字?!
答案 0 :(得分:1)
将(1-)?
添加到正则表达式中。这适用于可选的1-
。
答案 1 :(得分:1)
如果不检查完整的正则表达式,您可以使用此正则表达式阻止1-888
:
(?!(?:1-)?(\\$|#|800|855|866|877|888))\(?[\\s.-]*([0-9]{3})?[\\s.-]*\)?[\\s.-]*[0-9]{3}[\\s.-]*[0-9]{4}
答案 2 :(得分:1)
修改正则表达式:
(\+)?(1-)?\(?(\\$|#|800|855|866|877|888)\)?[\\s.-]*([0-9]{3})?[\\s.-]*\)?[\\s.-]*[0-9]{3}[\\s.-]*[0-9]{4}
这里的主要区别如下:
(\+)?
::一个懒惰的量词`?'匹配+字符,如果它发生在1之前。许多数字显示为+ 1-800-343-2432
(1-)?
::匹配1后跟一个 - 字符。 ?
是一个惰性量词,与1-
匹配(如果存在)。
我还添加了\(?
和\)?
,可让您匹配格式为+ 1-(800)-343-2432