多重负先行
Multiple Negative Lookahead
前三个字符必须是大写字母,不包括 I、O、S 或 Z。然后是一个破折号,然后是四个字符,可以是除 3 以外的任何字符。我有这个,但第一个否定前瞻也在捕获之外的东西第一个捕获组。
^((?!.*[IOSZ])[A-Z]{3})-((?!.*3)(.{4}))$
例如,我想捕获 AAA-444Z
。
您不需要提前了解此要求,因为您可以使用此正则表达式:
^[A-HJ-NP-RT-Y]{3}-[^3]{4}$
[A-HJ-NP-RT-Y]{3}
将匹配 3 个不是 I, O, S or Z
. 的大写字母实例
[^3]{4}
匹配任何非 3
. 的字符
根据下面的评论,如果你真的想要否定前瞻,那么请使用:
^(?:(?![IOSZ])[A-Z]){3}-(?:(?!3).){4}$
你应该从你的前瞻中删除 .*
,因为你想要匹配 3 个字符并将限制数字放在捕获组之外。最后一部分也使用否定字符 class:
^((?![IOSZ])[A-Z]){3}-[^3]{4}$
如果你想使用两个负前瞻使用以下:
^((?![IOSZ])[A-Z]){3}-((?!3).){4}$
请注意,要点是,当您使用环视时,您想要指定一个模式在一个特殊模式之后或之前,以及当您想要对需要告诉正则表达式引擎的字符数进行 lint 时考虑整个基于环视模式的限制。第一个 (?![IOSZ])[A-Z])
和第二个 ((?!3).)
.
前三个字符必须是大写字母,不包括 I、O、S 或 Z。然后是一个破折号,然后是四个字符,可以是除 3 以外的任何字符。我有这个,但第一个否定前瞻也在捕获之外的东西第一个捕获组。
^((?!.*[IOSZ])[A-Z]{3})-((?!.*3)(.{4}))$
例如,我想捕获 AAA-444Z
。
您不需要提前了解此要求,因为您可以使用此正则表达式:
^[A-HJ-NP-RT-Y]{3}-[^3]{4}$
[A-HJ-NP-RT-Y]{3}
将匹配 3 个不是I, O, S or Z
. 的大写字母实例
[^3]{4}
匹配任何非3
. 的字符
根据下面的评论,如果你真的想要否定前瞻,那么请使用:
^(?:(?![IOSZ])[A-Z]){3}-(?:(?!3).){4}$
你应该从你的前瞻中删除 .*
,因为你想要匹配 3 个字符并将限制数字放在捕获组之外。最后一部分也使用否定字符 class:
^((?![IOSZ])[A-Z]){3}-[^3]{4}$
如果你想使用两个负前瞻使用以下:
^((?![IOSZ])[A-Z]){3}-((?!3).){4}$
请注意,要点是,当您使用环视时,您想要指定一个模式在一个特殊模式之后或之前,以及当您想要对需要告诉正则表达式引擎的字符数进行 lint 时考虑整个基于环视模式的限制。第一个 (?![IOSZ])[A-Z])
和第二个 ((?!3).)
.