如何匹配这个字符串使用正则表达式?
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 位数字。
我有两个字符串:
(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 位数字。