1. 程式人生 > >[正則表達式]PCRE反向分組引用(語法)

[正則表達式]PCRE反向分組引用(語法)

一個 正則 () 規則 引用 aaa 沒有 ron 運用

正則表達式中,凡出現圓括號(),括號中的匹配內容就會被認為是一個分組;

根據括號從左邊出現的順序命名分組代號,分組代號由1到n(代號0通常被一些語言用來引用整個表達式匹配的結果,即使這個表達式沒有分組括號,但是表達式內不能引用\0),例如:

(a(b))

以上表達式包含兩個分組第1個是(a(b)),第2個是(b),很明顯第一個分組包含了第二個分組的內容;

反向引入分組,其實是後面引用分組中匹配的結果,引用分組的語法是\+分組代號:

(.)\1

這個表達式的含義是匹配一個任意字符,接下來再出現一個這樣的字符,註意,引用分組,是引用分組匹配的結果,而不是引用分組的表達式規則

分組可以用量詞控制匹配次數,在量詞的前面,分組引用依然有效,只不過引用的是多次匹配量詞的最後一次匹配的一個結果:

\b([^&])+&\1

如果運用以上表達式來匹配"aaa&aaa",那麽結果將會是"aaa&a",其中分組捕獲的結果是"a";

有兩點需要註意一下:

1. 盡管分組後面接量詞+號,但是分組引用的也只是分組匹配一次的結果"a"而不是多次的結果"aaa";

2. 分組引用的是最後一次匹配的結果,也就是&號前面的"a";

[正則表達式]PCRE反向分組引用(語法)