如果我有很多电话号码,例如
123-456-7890
(111-111-1111
111)-111-1111
(123)-456-7890
我只想匹配1号和4号,我的模式只能匹配4号,而且if条件似乎不起作用。
(\()(\d+)(?(1)\)\-|\-)(\d+\-\d+)
正则表达式网站中的所有解决方案都无法识别单个括号。
答案 0 :(得分:1)
您可以使用此正则表达式,该表达式匹配任意一种情况,并带有括号,也可以不带括号,使用替换,
^(?:\(\d+\)|\d+)-\d+-\d+$
还要使用开始/结束^
/ $
锚来确保正则表达式不允许部分匹配。
如果要完全匹配样本中的位数,可以使量词更具体,并使用此正则表达式,
^(?:\(\d{3}\)|\d{3})-\d{3}-\d{4}$
编辑:在正则表达式中使用If Clause
的OP的正则表达式的说明和更正
在正则表达式中,您需要通过将?
放在group1之后来将group1设为可选
(\()(\d+)(?(1)\)\-|\-)(\d+\-\d+)
^^^^ This is mandatory which stops it to match a number that doesn't have ( in start
因此您的正则表达式的正确版本应该是
^(\()?(\d+)(?(1)\)\-|\-)(\d+\-\d+)$
^ You need to add this to make group1 optional so it can match a number without `(`
此外,如您所见,我使用了^
和$
,因此正则表达式不允许数字中的部分匹配。
Check this demo with your own updated regex, which works like you expected
答案 1 :(得分:0)
尝试^(?(?=\()\(\d{3}\)|\d{3})-\d{3}-\d{4}$
说明:
^
-字符串的开头
(?(?=\()\(\d{3}\)|\d{3})
-条件表达式:如果正向预报(?=\()
成功(紧随其后的是括号(
),则匹配\(\d{3}\)
-括号之间的三位数,否则,匹配\d{3}
-三位数
-\d{3}-\d{4}
-匹配连字符,三位数,连字符和四位数
$
-字符串结尾