模式匹配中的负向前瞻

时间:2014-03-14 01:12:04

标签: regex perl pcre

我知道正则表达式q(?!u)意味着q后面没有你。

但是如果遇到正则表达式(?!u)怎么办?这是否意味着一个null不会被你或者除了你或其他什么之外的其他东西?

2 个答案:

答案 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"]