正则表达式匹配组与随机顺序的元素

Regex match group with elements in random order

为简单起见,假设我有以下文字字符串:

abc[4;?;z;*]def

其中 4、?、z 和 * 可以随机出现,由 ; 分隔, 并且是我事先知道的字符(或字符串)。

我有这个使用 'or' 组匹配字符串的正则表达式:

abc\[(?:z|\*|4|\?|\;)+\]def

问题是如果字符串中缺少一个元素,它仍然匹配,我想检查是否所有元素都存在:

abc[?;z;*]def

捕获组与我无关。我只想确认整个字符串。

你可以使用

abc\[(?=[^][]*z)(?=[^][]*4)(?=[^][]*\?)(?=[^][]*;)(?=[^][]*\*)[z*4?;]+]def

参见regex demo。详情:

  • abc\[ - 文字 abc[ 字符串
  • (?=[^][]*z) - 除了 [] 之外的零个或多个字符之后,必须有一个 z
  • (?=[^][]*4) - 除了 [] 之外的零个或多个字符之后,必须有一个 4
  • (?=[^][]*\?) - 除了 [] 之外的零个或多个字符之后,必须有一个 ?
  • (?=[^][]*;) - 除了 [] 之外的零个或多个字符之后,必须有一个 ;
  • (?=[^][]*\*) - 除了 [] 之外的零个或多个字符之后,必须有一个 *
  • [z*4?;]+ - 集合中的一个或多个字符,z*4?;
  • ]def - 文字 ]def 字符串。