2014-03-14 43 views
0

我知道正則表達式​​表示q後面跟着u。模式匹配中的負面預測

但是如果我遇到一個正則表達式(?!u)?這是否意味着你沒有跟隨或者只有你或者別的什麼?

回答

3

(?!u)零寬度斷言這意味着它字符之間位置相匹配,就像\b匹配單詞字符和非單詞字符之間的位置,或者^匹配字符串開頭的位置。

在這種情況下,但是,它不是一個u之前的任何位置相匹配,所以當它被應用到一個字符串像uuuuxx將最後u後第一x之前匹配。這似乎不是一件非常有用的事情,但它是。

2

如果與/g修飾符一起使用,它會將當前搜索標記移動到not u字符之前,因此\ G的更多正則表達式測試將從此處開始。

一個潛在更現實的使用可能是一個split

my $str = 'abcuuuuuduuuu'; 

my @vals = split /(?!u)/, $str; 

use Data::Dump; 
dd \@vals; 

輸出:

["a", "b", "cuuuuu", "duuuu"]