我有下面的正则表达式,它遵循以下规则
(?<!x)(?=(?:[._ –-]*\d){9})\d{2,}[._ –-]*\d{2,}[._ –-]*\d{2,}
规则:
下面的是regex演示,它显示了与上述规则相匹配的数字。
https://regex101.com/r/mrGcvp/1
现在,regex模式不应该匹配遵循上述规则的9位数字,如果它属于以下排除规则。
排除规则,
以下规则根本不应匹配该数字。
发布于 2022-03-08 18:10:41
您可以使用
(?<!x)(?=(?:[._ –-]*\d){9})(?!9|66\D*6|00\D*0|(?:\d\D*){3}0\D*0|(?:\d\D*){5}0(?:\D*0){3})\d{2,}[._ –-]*\d{2,}[._ –-]*\d{2,}
见regex演示。
添加的部分是(?!9|66\D*6|00\D*0|(?:\d\D*){3}0\D*0|(?:\d\D*){5}0(?:\D*0){3})
,如果在(?<!x)
和(?=(?:[._ –-]*\d){9})
检查之后,立即在当前位置的右侧出现匹配,则匹配失败
9|
-一个9
数字,或66\D*6|
- 66
,零或多个非数字,6
,或00\D*0|
- 00
,零或多个非数字,0
,或(?:\d\D*){3}0\D*0|
-三次出现一个数字,然后出现零或多个非数字,然后出现0
、零或多个非数字、0
或(?:\d\D*){5}0(?:\D*0){3})
-一个数字和零或多个非数字的五次出现,0
,然后三次出现零或多个非数字,后面跟着一个0
字符。注意,我使用的是\D*
而不是[._ –-]*
,这在这里应该足够了,但是如果您想让它更精确,可以用[._ –-]*
替换每个\D*
。
发布于 2022-03-08 18:17:50
您可以使用此正则表达式:
(?<![xX])(?=(?:[._ –-]*\d){9})(?!9|666|000|.{3}00|.{5}0000)\d{2,}[._ –-]*\d{2,}[._ –-]*\d{2,}
为了执行所有规则,我们有一个负面的展望:
(?!9|666|000|.{3}00|.{5}0000)
这一点如下:
9
:不是从9
开始的666
:不是从666
开始的000
:不是从000
开始的.{3}00
:不允许00
在4-5位置.{5}0000
:不允许0000
在6-9位置https://stackoverflow.com/questions/71399339
复制相似问题