我想编写一个正则表达式模式,以匹配以“ Z”开头且不包含接下来的2个字符“ IU”和其他任何字符的字符串。
我正在使用此模式,但它不起作用 Z [^(IU)] +。* $
答案 0 :(得分:1)
当您要否定字符串中的某些字符时,可以使用字符类,但是当您要否定特定序列中的多个字符时,则需要使用负向查找,并像这样编写正则表达式,>
^Z(?!IU).*$
还请注意,您的第一个单词ZISADR
将与之匹配,因为Z
后没有IU
您的正则表达式Z[^(IU)]+.*$
将匹配以Z
开头的字符,而[^(IU)]+
字符类将匹配(
I
U
以外的任何字符并且)
后面再加上.*
一次或多次,则表示它将匹配零次或多次的任何字符,这不是您想要的行为。
编辑:提供解决方案
基于非前瞻性的解决方案是使用此正则表达式,
^Z(?:I[^U]|[^I]U|[^I][^U]).*$
此正则表达式具有三个主要替代形式,其中包含了涵盖所有必要的情况。
I[^U]
-确保第二个字符为I
,则第三个字符不应为U
[^I]U
-确保第三个字符为U
,则第二个字符不应为I
[^I][^U]
-确保第二个和第三个字符不应同时为I
和U
。答案 1 :(得分:1)
尝试此正则表达式:
^Z(?:I[^U]|[^I]).*$
说明:
^
-断言行的开头Z
-匹配Z
I[^U]
-匹配I
,后跟不是U
的任何字符|
-或[^I]
-匹配不是I
的任何字符.*
-匹配0+次出现的不是换行符的任何字符$
-声明行的结尾