我有一个正则表达式(?:^|[^\w])(\d{5}(?:[-\s]\d{4})?)(?:$|[^\w])

它正在寻找美国标准的5位数邮政编码或更长的5 + 4位数版本。

但是,此特定的正则表达式也匹配以下形式的数字的5位数字。

1111-1111111111匹配。如何排除这种情况?

我试过在正则表达式的开头添加排除字符,就像(?:^|[^\w]|-)一样,它没有效果。

最佳答案

请注意,您可以实际使用

\b(?<!-)\d{5}(?:[- ]\d{4})?(?!-)\b


它更短,更易读。后面的(?<!-)负向查找将确保没有-在该值之前,(?!-)负向查找将确保没有-在该值之后,并且\b单词边界将有效替换(?:^|\W)(?:$|\W)非捕获组。

请参见regex demo

09-11 04:47