我有一个正则表达式(?:^|[^\w])(\d{5}(?:[-\s]\d{4})?)(?:$|[^\w])
。
它正在寻找美国标准的5位数邮政编码或更长的5 + 4位数版本。
但是,此特定的正则表达式也匹配以下形式的数字的5位数字。1111-11111
。 11111
匹配。如何排除这种情况?
我试过在正则表达式的开头添加排除字符,就像(?:^|[^\w]|-)
一样,它没有效果。
最佳答案
请注意,您可以实际使用
\b(?<!-)\d{5}(?:[- ]\d{4})?(?!-)\b
它更短,更易读。后面的
(?<!-)
负向查找将确保没有-
在该值之前,(?!-)
负向查找将确保没有-
在该值之后,并且\b
单词边界将有效替换(?:^|\W)
和(?:$|\W)
非捕获组。请参见regex demo。