自 PHP 5.3.0起, POSIX 正規表示式擴充被廢棄。在 POSIX 正規和 PCRE 正則之間有一些不同,本文列出了在轉向PCRE 時最顯著的需要知道的不同點。
PCRE 函數需要模式以分隔符號閉合。
不像POSIX,PCRE 擴充功能沒有專門用於大小寫不敏感匹配的函數。取而代之的是,支援使用i (PCRE_CASELESS) 模式修飾符完成相同的工作。 其他模式修飾符同樣可用於改變匹配策略。
POSIX 函數從最左面開始尋找最長的匹配,但是 PCRE 在第一個合法匹配後停止。如果字串 不匹配這沒有什麼區別,但是如果匹配,兩者在結果和速度上都會有差別。 為了說明這個不同, 考慮下面的例子(來自Jeffrey Friedl 的《精通正規表示式》一書)。 使用模式 one(self)?(selfsufficient)? 在字串oneselfsufficient 上匹配,PCRE 會匹配到oneself,但是使用 POSIX,結果將是整個字串 oneselfsufficient。 兩個子字串都符合原始字串,但是 POSIX 將 最長的最為結果。
函數對照表
POSIX
PCRE
ereg_replace() preg_replace() gi_replace() preg_replace()
eregi() preg_match()
split () preg_split()
spliti() preg_split()
sql_regcase() 無對等函數