CIX. Perl 相容正則表達式函數

簡介

本類函數中所使用的模式極其類似 Perl。表達式應被包括在定界符中,如斜線(/)。任何不是字母、數字或反斜線(\)的字元都可以作為定界符。若果作為定界符的字元必須被用在表達式本身中,則需要用反斜線轉義。自 PHP 4.0.4 起,也可以使用 Perl 風格的 (),{},[] 和 <> 符合定界符。詳細解釋見模式語法

結束定界符的後面可以跟上不同的修正符以影響符合模式。見模式修正符

PHP 也支援 POSIX 增加語法的正則表達式,見 POSIX 增加正則表達式函數

警示

要留意到 PCRE 的一些局限。更多訊息見 http://www.pcre.org/pcre.txt

需求

正則表達式的支援是由 PCRE(Perl Compatible Regular Expression)庫提供的,這是個開放原始碼的軟體,作者為 Philip Hazel,版權屬於英國劍橋大學。可於以下位址獲得:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

安裝

自 PHP 4.2.0 起這些函數預設被啟動。可以通過 --without-pcre-regex 禁用 PCRE 函數。若果不使用綁定的庫的話,用 --with-pcre-regex=DIR 來指定 PCRE 庫檔案和標頭檔的路徑。對早期版本必須在編譯時用 --with-pcre-regex[=DIR] 才能使用這些函數。

PHP 的 Windows 版本已經內建該增加模組的支援。無需加載任何附加增加庫即可使用這些函數。

運行時配置

本增加模組在 php.ini 中未定義任何配置選項。

資源類型

本增加模組未定義任何資源類型。

預定義常量

以下常量由本增加模組定義,因此只有在本增加模組被編譯到 PHP 中,或是在運行時被動態加載後才有效。

表格 1. PREG 常量

常量說明
PREG_PATTERN_ORDER 對結果排序使得 $matches[0] 為整個模式的符合結果的陣列,$matches[1] 為第一個括號內的子模式所符合的字串的陣列,等等。本旗標僅用於 preg_match_all()
PREG_SET_ORDER 對結果排序使得 $matches[0] 為第一組符合結果的陣列,$matches[1] 為第二組符合結果的陣列,等等。本旗標僅用於 preg_match_all()
PREG_OFFSET_CAPTUREPREG_SPLIT_OFFSET_CAPTURE 的說明。本旗標自 PHP 4.3.0 起可用。
PREG_SPLIT_NO_EMPTY 本旗標使 preg_split() 僅返回非空的結果。
PREG_SPLIT_DELIM_CAPTURE 本旗標使 preg_split() 也捕捉定界符模式中的括號表達。本旗標自 PHP 4.0.5 起可用。
PREG_SPLIT_OFFSET_CAPTURE 若果設定本旗標,對每個出現的符合結果也同時返回其附屬的字串偏移量。注意這改變了返回的陣列的值,使其中的每個單元也是一個陣列,其中第一項為符合字串,第二項為其偏移量。本旗標自 PHP 4.3.0 起可用且僅用於 preg_split()

範例

例子 1. 合法的模式舉例

  • /<\/\w+>/

  • |(\d{3})-\d+|Sm

  • /^(?i)php[34]/

  • {^\s+(\s+)?$}

例子 2. 非法的模式舉例

  • /href='(.*)' - 缺少結束定界符

  • /\w+\s*\w+/J - 不明的修正符 'J'

  • 1-\d3-\d3-\d4| - 缺少起始定界符

目錄
模式修正符 -- 解說正則表達式模式中使用的修正符
模式語法 -- 解說 Perl 相容正則表達式的語法
preg_grep --  返回與模式符合的陣列單元
preg_match_all -- 進行全局正則表達式符合
preg_match -- 進行正則表達式符合
preg_quote -- 轉義正則表達式字元
preg_replace_callback -- 用回呼函數執行正則表達式的搜尋和置換
preg_replace -- 執行正則表達式的搜尋和置換
preg_split -- 用正則表達式分割字串