欧美AV无码一区二区,麻豆+无码+国产在线+观看,欧美狂躁少妇XXXX高潮无码,美女扒开屁股让男人桶免费观看,极品粉嫩国产18尤物在线播放

子組(子模式)

子組通過(guò)圓括號分隔界定,并且它們可以嵌套。 將一個(gè)模式中的一部分標記為子組(子模式)主要是來(lái)做兩件事情:

  1. 將可選分支局部化。比如,模式cat(arcat|erpillar|)匹配 ”cat”, “cataract”, “caterpillar” 中的一個(gè),如果沒(méi)有圓括號的話(huà),它匹配的則是 ”cataract”, “erpillar” 以及空字符串。

  2. 將子組設定為捕獲子組(向上面定義的)。當整個(gè)模式匹配后, 目標字符串中匹配子組的部分將會(huì )通過(guò) pcre_exec()()ovector 參數回傳給調用者。 左括號從左至右出現的次序就是對應子組的下標(從 1 開(kāi)始), 可以通過(guò)這些下標數字來(lái)獲取捕獲子模式匹配結果。

比如,如果字符串 ”the red king” 使用模式((red|white) (king|queen)) 進(jìn)行匹配, 模式匹配到的結果是 array(“red king”, ”red king”, “red”, “king”) 的形式, 其中第 0 個(gè)元素是整個(gè)模式匹配的結果,后面的三個(gè)元素依次為三個(gè)子組匹配的結果。 它們的下標分別為 1, 2, 3。

事實(shí)上,并不一定同時(shí)需要圓括號的兩種功能。 經(jīng)常我們會(huì )需要子組進(jìn)行分組, 但又不需要(單獨的)捕獲它們。 在子組定義的左括號后面緊跟字符串 ”?:” 會(huì )使得該子組不被單獨捕獲, 并且不會(huì )對其后子組序號的計算產(chǎn)生影響。比如, 如果字符串 "the white queen" 匹配模式 the ((?:red|white) (king|queen)), 匹配到的子串是 "white queen" 和 "queen", 他們的下標分別是 1 和 2。 捕獲子組的最大序號為 65535。然而由于 libpcre 的配置,我們可能無(wú)法編譯這么長(cháng)的 正則表達式。

為了方便簡(jiǎn)寫(xiě),如果需要在非捕獲子組開(kāi)始位置設置選項, 選項字母可以位于 ? 和 : 之間,比如兩個(gè)模式:

(?i:saturday|sunday)
(?:(?i)saturday|sunday)

匹配到了完全相同的字符集。因為可選分支會(huì )從左到右嘗試每個(gè)分支, 并且選項沒(méi)有在子模式結束前被重置, 并且由于選項的設置會(huì )穿透對后面的其他分支產(chǎn)生影響,因此, 上面的模式都會(huì )匹配 ”SUNDAY” 以及 ”Saturday”。

可以對子組使用 (?P<name>pattern) 的語(yǔ)法進(jìn)行命名。 這個(gè)子模式將會(huì )在匹配結果中同時(shí)以其名稱(chēng)和順序(數字下標)出現, 還有兩種為子組命名的語(yǔ)法: (?<name>pattern)(?'name'pattern)。

有時(shí)需要多個(gè)匹配可以在一個(gè)正則表達式中選用子組。 為了讓多個(gè)子組可以共用一個(gè)后向引用數字的問(wèn)題, (?| 語(yǔ)法允許復制數字。 考慮下面的正則表達式匹配Sunday

(?:(Sat)ur|(Sun))day

這里當后向引用 1 空時(shí)Sun 存儲在后向引用 2 中。 當后向引用 2 不存在的時(shí)候 Sat 存儲在后向引用 1中。 使用 (?|修改模式來(lái)修復這個(gè)問(wèn)題:

(?|(Sat)ur|(Sun))day

使用這個(gè)模式, SunSat 都會(huì )被存儲到后向引用 1 中。

欧美AV无码一区二区,麻豆+无码+国产在线+观看,欧美狂躁少妇XXXX高潮无码,美女扒开屁股让男人桶免费观看,极品粉嫩国产18尤物在线播放