正则表达式匹配组与随机顺序的元素
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
字符串。
为简单起见,假设我有以下文字字符串:
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
字符串。