如何设置重复正则表达式

本文关键字:正则表达式 设置 何设置 | 更新日期: 2023-09-27 18:28:32

我有一个正则表达式^'d{5}$|^'d{5}-'d{4}*$",它检查了US zip。但我需要检查"zip, zip, zip"如何做到这一点?

我试过这个^('d{5}$|^'d{5}-'d{4},)*$,但它不起作用

如何设置重复正则表达式

尝试

((^|, )('d{5}|'d{5}-'d{4}))*$

测试人员:http://regexr.com?36297

每个匹配的前面必须有(^|, ),因此必须有字符串的开头或,(逗号空间)

请注意,您不应该在.NET中使用'd,因为٠١٢٣٤就是'd!(在.NET 'd中包括非ASCII Unicode数字)。CCD_ 10通常较好。

您似乎需要的表达式是:

    ^'d{5}(|-'d{4})(,'d{5}(|-'d{4}))*$

你试图写的是:

    ^('d{5}|'d{5}-'d{4},)*$

但这需要每个ZIP都有一个尾随逗号,而最后一个ZIP则没有。

分解给出的答案,

  • 'd{5}(|-'d{4})是您原来的变体,但只是将-1234作为可选项
  • (,'d{5}(|-'d{4}))*是第一个以逗号开头的正则表达式,并且允许零次或多次

我会用这个来表示速度:

 ^'d{5}(?:-'d{4})?(?:,'s*'d{5}(?:-'d{4})?)*$

扩展

 ^ 
 'd{5} 
 (?: - 'd{4} )?
 (?:
      , 's* 'd{5} 
      (?: - 'd{4} )?
 )*
 $

这是为了速度/灵活性:

 ^'s*'d{5}(?:'s*-'s*'d{4})?(?:'s*,'s*'d{5}(?:'s*-'s*'d{4})?)*'s*$

扩展

 ^ 
 's* 
 'd{5} 
 (?: 's* - 's* 'd{4} )?
 (?:
      's* , 's* 'd{5} 
      (?: 's* - 's* 'd{4} )?
 )*
 's* 
 $