我知道正则表达式q(?!u)
意味着q后面没有你。
但是如果遇到正则表达式(?!u)
怎么办?这是否意味着一个null不会被你或者除了你或其他什么之外的其他东西?
答案 0 :(得分:3)
(?!u)
是零宽度断言,这意味着它匹配字符之间的位置,就像\b
匹配a之间的位置一样单词字符和非单词字符,或^
匹配字符串开头的位置。
但是,在这种情况下,它会匹配u
之前的任何位置,因此当它应用于uuuuxx
之类的字符串时,它将在最后{{1}之后匹配在第一个u
之前。它似乎不是一件非常有用的事情,但确实如此。
答案 1 :(得分:2)
如果与/g
修饰符一起使用,它会将当前搜索标记移动到非u字符之前,因此与\ G一起使用的进一步正则表达式测试将从那里开始。
一个可能更实际的用途可能是split
my $str = 'abcuuuuuduuuu';
my @vals = split /(?!u)/, $str;
use Data::Dump;
dd \@vals;
输出:
["a", "b", "cuuuuu", "duuuu"]