php—PCRE正規表示式內部選項設置

伊谢尔伦
發布: 2016-11-21 17:21:24
原創
1301 人瀏覽過

PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_UNGREEDY,PCRE_EXTRA, PCRE_EXTENDED and PCRE_DUPNAMES 等模式修飾符設定可在模式內部使用一個perl 選項option letters

i    for PCRE_CASELESS    

m    for PCRE_MULTILINE    

   

U    for PCRE_UNGREEDY    

X    for PCRE_EXTRA    

J寫不敏感匹配。同樣可以用它來取消這些設置, 例如 (?im-sx) 設置了PCRE_CASELESS,PCRE_MULTILINE, 但同時取消了 PCRE_DOTALL 和 PCRE_EXTENDED。 如果一個字母即出現在 - 之前, 也出現在 - 之後,這個選項被取消設定。

當一個選項在模式的最上級(也就是說不在子組中)時, 這個改變會影響模式中剩餘部分。例如 /ab(?i)c/ 只匹配 ”abc” 和 ”abC”。 這個形式在 PCRE 4.0(PHP 4.3.3) 中改變。在此之前的版本中, /ab(?i)c/ 行為和 /abc/i 完全一致。

如果一個選項在子組中設置,產生的影響是不同的。這是 perl 5.005 中行為的變體。 一個選項在子組內部設置,僅改變子組中剩餘的部分, 因此 (a(?i)b)c 僅匹配 ”abc” 和 ”aBc” (假設沒有使用 PCRE_CASELESS 選項)。 這就意味著選項在模式的不同位置可以造成不同的影響。 在同一個子模式中, 一個分支的選項設定回穿透到後面剩餘的其他分支。 如 (a(?i)b|c) 配對”ab”, “aB”, “c” 和 ”C”。 儘管在匹配 ”C” 時第一個分支會在選項被設定前就被丟棄。 這是因為選項的設定是在編譯期確定的,否則可能會帶來非常怪異的行為。

PCRE 專用選項 PCRE_UNGREEDY 和 PCRE_EXTRA 可以和perl 相容選項以相同的方式改變, 分別使用字母U 和X. (?X) 標記設定有些特殊,它必須出現在任何其他特性之前, 最好放在最開頭的位置。

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!