如何匹配这个字符串使用正则表达式?

How to match this string use Regex?

我有两个字符串:

(123)4567890
1234567890

() 必须同时出现,或同时省略。目前我使用这个正则表达式:

(?:(?:\(\d{3}\))|(?:\d{3}))\d{7}

它使用 OR 来匹配两种情况之一:

\(\d{3}\)
\d{3}

出于好奇,我如何检查当前匹配项(检查 ))中的最后一个匹配项(是否有 ()? 你能建议我另一种方法来达到同样的效果吗?

你可以使用一个conditional construct:捕获一个可选的开头(然后匹配3个数字,然后检查第1组是否为空,如果不是,则匹配结尾):

(\()?\d{3}(?(1)\))\d{7}

regex demo。根据要求添加anchors/boundaries。

详情

  • (\()? - 匹配 ( char
  • 的可选捕获组 1
  • \d{3} - 3 位数
  • (?(1)\)) - 如果第 1 组匹配,则匹配 )
  • \d{7} - 7 位数字。