1. 程式人生 > >PHP正則表示式中的元字元

PHP正則表示式中的元字元

假設我們需要在一個字串中查詢he,我們可以使用正則he,這是最簡單的正則表示式,它會精確地匹配這樣的字串:有兩個字元組成,前一個字元是h後一個字元是e。一般情況下,處理正則表示式的工具會提供一個忽略大小寫的選項,如果選擇了,這個表示式就可以匹配he、HE、He、hE這四種情況的任意一種,但是呢,還有一個問題就是很多單詞會包含he這兩個連續的字元,像her、heat等,我們如果要精準的來查詢的話,可以使用\bhe\b這種方式,\b是正則表示式規定的一個特殊的程式碼,代表單詞的開頭或者結尾,也就是單詞的分界處,雖然英文單詞是由空格,標點符號或者換行來分隔,但是\b並不匹配這些單詞分隔字元的任意一個,它只是匹配一個位置。

\b匹配位置的精確說法就是,前一個字元和後一個字元不全是(一個是,一個不是或者不存在)。

再比如我們要查詢he後面不遠處跟著一個is,可以使用\bhe\b.*\bis\b表示式,在這裡的.就是元字元,可以匹配除了換行符以外的任何字元,*同樣是元字元,不過它代表的不是字元,也不是位置,而是數量,它指定*前面的內容可以連續重複使用任意次,使得整個表示式可以得到匹配,因此,當.和*放在一起,就意味著任意數量的,不包含換行符的字元,這樣來看的話,上述的正則表示式就可以來解讀了,它的意思就是,先是一個單詞he,完事跟著任意個任意字元(但是不包含換行符),最後是is這個單詞。

元字元(meta character)是正則表示式中具有特殊意義的專用字元,用來規定其前導字元(也就是位於元字元前面的字元)在目標物件中的出現模式,因為具體的大家都瞭解的差不多,咱就不廢話了啊。

先來通過幾個小例子感受下正則的魅力唄:

1、匹配以字母a開頭的單詞

\ba\w*\b,這個表示式的意思是,先是某個單詞開始處\b,完事是字母a,接著就是任意數量的字母或者數字(\w*),最後是單詞的結束處(\b),匹配的單詞類似於action,a等。

2、匹配一個或者更多連續數字

\d+,這個表示式可匹配0、1、333等,這裡的元字元+和*類似,不同的是*匹配的是重複任意次(可能是0次),+匹配重複1次或者更多次。

3、匹配剛好6個字元的單詞

\b\w{6}\b,這個表示式可匹配action、123456、set_up等型別的單詞,我們要注意,正則裡的單詞表示的是不少於一個的連續字母和數字。

4、匹配中國部分地區電話號碼

0\d\d-\d\d\d\d\d\d\d\d,這個表示式匹配以0開頭後面兩個數字,完事跟著-之後就是8個數字,類似於012-12345678,在這個表示式中\d是元字元,匹配數字,-是連字元,只是匹配它本身,上述表示式可優化為,0\d{2}-\d{8}。

元字元中有兩個用來匹配位置,其中^使用來匹配字串開始的位置,$是用來匹配字串結束的位置,這兩個字元與\b有點類似,在驗證輸入內容是非常有用,比如我們可以用來驗證輸入的QQ號碼,使用^\d{5,11}$表示式,這裡的{5,11}表示的是重複次數不能少於五次,同時也不能多於11次,因為使用了^$,所以呢,整個字串,都要與這個表示式匹配,也就是說,這個字串只能由5個到11個數字組成。

.是使用頻率最高的元字元了,就比如我們在頁面抓取的時候,要匹配div裡面的內容,就需要使用到.,匹配title標籤裡的所有內容就可以使用<title>.*<\/title>表示式。

再來就涉及到了量詞這個概念了,像之前表示式\d+,\d{5,11}都是用了量詞,在這裡我們需要注意的就是*和?這兩個量詞的區別了,具體的大家都瞭解,咱就是提個醒,就不過多的贅述了。

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

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