REGEX表达式以排除免费电话号码

时间:2014-05-16 15:38:26

标签: java regex

我写的这个正则表达式应该提取免费电话号码,但是当有一个像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这样的数字?!

3 个答案:

答案 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

的数字