我正在尝试使用正则表达式匹配值,这些值可能是用逗号分隔的。基本上,我想要的是:如果字符串中的任何一个值在第三个位置不以3g或3k开头,则返回true。
我的测试代码如下:
my @a = ('in3g123456,dh3k123456,dhec110101','dhec110101,dhec123456','in3g123456,dh3k123456', 'c3kasdf', 'usdfusdufs3gsdf' );
foreach (@a) {
print $_;
say $_ =~ /(?:^|,)\w{2}[^(?:3G|3K)]/i ? " true" : " false";
}
这段代码返回:
这返回
in3g123456,dh3k123456,dhec110101 true
dhec110101,dhec123456 true
in3g123456,dh3k123456 false
c3kasdf false <- whaaaaaaaat?
usdfusdufs3gsdf true
我不明白为什么第四个选项是错误的。感谢任何帮助。
(?!3[GK])
? - Benjamin W.