1. 程式人生 > >PHP正則表示式的匹配規則

PHP正則表示式的匹配規則

咱們要查詢數字,字母,空白很簡單,因為已經有了對應這些字元的元字元,但是如果匹配沒有預定義元字元的字元集合(比如母音字母a、e、i、o、u),方法很簡單,在方括號裡列出它們就行,如[aeiou]匹配任何一個英文母音字母,[.?! ]匹配各種標點符號以及空格等等,[]匹配單個字元,儘管內部含有好多字元,我們也可以指定範圍如[0-9]和\d一樣,代表一位數字,查詢字元很簡單,最主要的就是弄清楚字串中什麼時候需要轉義。

如果我們要查詢元字元本身像?等,就會出現問題,因為它們會被解釋成別的意思,沒有辦法指定,這時就可以使用\來取消這些字元的特殊意義,這就叫做轉義,通俗的說,轉義就是為了防止特殊字元被解析,在JavaScript和PHP中,都有這個轉義的概念,像JavaScript裡的彈出對話方塊分行顯示,使用<br>是沒有用的,必須得使用\r\n。

還有就是在PHP正則裡,不是所有的特殊字元都是需要轉義的,只需要在可能引起歧義或者被誤解析的情況下才需要轉義,有些情況你轉義也是不生效的,來看一段程式碼:

$reg = "#[ac\}d]#";
$str = "a{de}";
preg_match_all($reg,$str,$list);
var_dump($list);

類似上述程式碼,只要是特殊字元在表示式中,不會引起歧義,就不需要轉義,大家可以擴充套件下思維,再次看下,咱這裡只是提示一下,就不做過多的贅述了啊。

還有的時候,我們需要查詢不屬於某個字元類的字元,或者表示式和已知定義相反(比如除了數字之外其他的任意字元),這個時候就需要用到了反義。它有一個明顯特徵,和一些已知的元字元相反,並且為大寫形式,如\d表示數字,\D表示非數字。

來看一些實際的例子:

1、不包含空白符的字串,\S+

2、用尖括號括起來、以a開頭的字串,<a[^>]+>,例如<a href="http://www.luyaran.com">luyaran</a>,匹配結果就是<a href="http://www.luyaran.com">,^在這裡就代表非的意思,日常工作中反義用的不多,因為會擴大範圍,使得查詢困難

我們再來看一種正則匹配模式分支,這個意思就是存在多種可能的匹配情況,像cat、hat這兩個單詞,我們可以用[ah]at來匹配,但是cat、hat、toat這三個就需要分支模式((c|h|to)at)來匹配了,這個括號中的表示式將視作一個整體,裡面的|表示分支,來看一個例項:

0\d{2}-\d{8}|0\d{3}-\d{7}

上述表示式匹配兩種電話號碼,一是三位的區號,一是四位的區號。

再來看分組的匹配模式,也就是說,分組可以重複多個字元,看下例項:

匹配IP地址:(\d{1,3}\.){3}\d{1,3}

再來就是反向引用這個匹配模式了,它用於重複搜尋前面某個分組匹配的文字。

還有就是貪婪和非貪婪的匹配模式,咱們這裡就不做贅述了啊。

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

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