Java 用于排除免费电话号码的正则表达式

Java 用于排除免费电话号码的正则表达式,java,regex,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这样的数字 将(1-?前置到您的正则表达式中。这将适用于可选的1-而无需检查完整的正则表达式。您可

我编写了这个正则表达式,它应该提取免费数字,但是当有一个像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这样的数字

(1-?
前置到您的正则表达式中。这将适用于可选的
1-

而无需检查完整的正则表达式。您可以使用此正则表达式来阻止
1-888

(?!(?:1-)?(\\$|#|800|855|866|877|888))\(?[\\s.-]*([0-9]{3})?[\\s.-]*\)?[\\s.-]*[0-9]{3}[\\s.-]*[0-9]{4}

修改正则表达式:

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

的数字。测试时,它给了我一个错误:“这行有多个标记-无效的转义序列(有效的是\b\t\n\f\r\”\)-无效的转义序列(有效的是\b\t\n\f\r\”此部分的\'\'):(?!(?:1-)(\$)您的正则表达式似乎有问题。请尝试更新正则表达式。@anubhava只是想提一句,您将1设置为可选的,但是您将其设置为非捕获组,并将其设置为负前瞻,这意味着1-上的匹配将被丢弃。是的,这是OP的目的,以避免匹配
1-800
数字。您能否澄清以下问题请提问?您到底想提取什么?请显示一个输入和输出示例