我希望匹配(010)12345678
或010-12345678
这样的表达式。现在我的正则表达式为\(?\d{3}[)-]\d{8}
,但匹配表达式(010-12345678
。我该如何写一个真正的正则表达式?
编辑:
我写了一个正确的正则表达式,如(\(\d{3}\)|[^(]\d{3}-)\d{8}
,可以满足我的需求。
答案 0 :(得分:1)
请注意,(\(\d{3}\)|[^(]\d{3}-)\d{8}
也会匹配非(
之前的数字,该数字以3位开头,-
位于[^(]
之前。
您需要将其删除并使用
(\(\d{3}\)|\d{3}-)\d{8}
^^^^^^^^^^^^^^^^^^
见demo。或锚定版本:
^(\(\d{3}\)|\d{3}-)\d{8}$
请参阅another demo
模式详情:
^
- 字符串开头(\(\d{3}\)|\d{3}-)
- 第1组匹配2个替代方案中的任何一个:
\(\d{3}\)
- (
后跟3位数和文字)
|
- 或\d{3}-
- 3个数字和文字-
\d{8}
- 8位数字$
- 字符串结束。 根据正则表达式引擎,\d
可能需要替换[0-9]
。