1. 程式人生 > >PHP正則表示式基礎之認識正則表示式

PHP正則表示式基礎之認識正則表示式

正則表示式是我們平常在程式開發過程中經常用到的一種工具,有關於它的起源以及除程式之外的應用場景咱就不贅述了,咱們只看它在程式中是如何來應用的。

這個正則表示式在我們程式中通常是把它當做一種模式去匹配一類字串,通俗地講,就是用一個字串描述一個特徵,完事驗證另外一個字串是否符合這個特徵的公式。你像ab+描述的特徵就是一個a後面加上無數個b,類似於abb、abbbbb都是符合這個特徵的,但是類似於add、addddd就是不符合這個特徵的。

正則可以應用到各個方面,常用的高階編輯器如vim等,幾乎都支援正則表示式,在程式語言中,更是得到大規模的推廣,你看,現在的語言大部分都是原生的,所以都可以從語法上支援,尤其是在Perl的推動下,更是使得各種語言都支援了正則,不支援的,也可以通過一些包來擴充套件支援,最適合正則的現在應該是Perl和.net,而JavaScript就比較次了。

正則怎麼說呢,看起來總是怪怪的,令人望而生畏,實際上正則的實現有多種引擎(如非確定性有窮自動機NFA,確定性有窮自動機DFA),不同語言的正則語法大同小異,其表現又有多種風格,咱們來看下PHP中的兩套正則函式,兩者功能相似:

1、由PCRE庫提供的函式,以preg_為字首命名

PCRE(Perl compatible regular expression,相容prel的正則表示式)由Philip Hazel於1997年開發,現代的程式設計軟體和語言中,一般都使用PCRE庫。

2、由POSIX擴充套件提供的函式,以ereg_為字首命名

POSIX(portable operating system interface of Unix,Unix可移植作業系統介面)由一系列規範構成,定義了Unix作業系統應該支援的功能。自PHP5.3之後就不再使用POSIX正則函式庫,若使用,則會報deprecated級別的錯誤,其實使不使用本質上沒有差別,有差別的只是表現形式、語法、擴充套件功能等方面。

我們在Windows資源管理器中查詢檔案或者批處理檔案的時候,會使用萬用字元?或者*表示匹配一組字元,這和正則表示式類似,在正則中?表示一個不確定的字元,*表示任意多個不確定字元,我們來看下Windows中刪除本地垃圾檔案批處理的部分程式碼:

是什麼鬼,你知道麼,反正我不知道,不過我們要注意的是咱們這裡的?和*叫做萬用字元,而不是正則表示式,在PHP中,一個正則表示式包含三個部分,即分隔符、表示式、修飾符。

分隔符呢,可以是除了字母、數字、反斜線、空白字元以外的任何字元(如/、!、#、|、~),我們經常使用的事正斜線/,hash符號(#),以及取反符號(~),我們考慮到可讀性,為了避免和反斜線混淆,所以一般不使用正斜線做分隔符。

表示式就是由一些特殊字元和非特殊字元的字串組成,像[a-z0-9_--][email protected][a-z0-9_.]這種表示式,可以匹配一個簡單的電子郵件字串。

而最後的修飾符就是用於開啟或者說關閉某種功能或者說模式。

咱們後期測試正則的話可以在站長之家來測試。

好啦,本次記錄就到這裡了。

如果感覺不錯的話,請多多點贊支援哦。。。