PHP開發(fā)基礎教程之正則表達式中的原子
一、原子
原子是正則表達示里面的最小單位,原子說白了就是需要匹配的內容。一個成立的正則表達示當中必須最少要有一個原子。
所有可見不可見的字符就是原子
注:我們見到的空格、回車、換行、0-9、A-Za-z、中文、標點符號、特殊符號全為原子。
在做原子的實例前我們先來講解一個函數(shù),preg_match:
語法:
int preg_match ( string $正則 , string $字符串 [, array &$結果] )
功能:根據(jù)$正則變量,匹配$字符串變量。如果存在則返回匹配的個數(shù),把匹配到的結果放到$結果變量里。如果沒有匹配到結果返回0
注:上面是preg_match常用的主要幾個參數(shù)。我在上面將另外幾個參數(shù)沒有列出來。因為,另外兩個參數(shù)太不常用了。
我們來通過程序驗證:
實例:代碼如下
<?php //定義一個變量pattern,存放正則表達式 $pattern = '/a/'; //待搜素字段 $string = 'ddfdjjvi2jfvkwkfi24'; //判斷,如果匹配到了,輸出$matcges的值 if(preg_match($pattern, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
結果:
因為我希望的是匹配a,而$string當是是不存在a的,所以不成功。
改造這個例子
實例:代碼如下
<?php //定義一個變量pattern,存放正則表達式 $pattern = '/f/'; //待搜素字段 $string = 'ddfdjjvi2jfvkwkfi24'; //判斷,如果匹配到了,輸出$matcges的值 if(preg_match($pattern, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
結果:
上面的字符串里存在f,所以匹配成功
接下來我們匹配一個空格試試:
實例:如下
<?php $zz = '/ /'; $string = 'sssssw aaaaa'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
結果:
因上,$string這個變量的w字符后存在一個空格。所以匹配成功,輸出了字符串類型,長度為1。只不過我們的肉眼不可見,看不到這個字符串而已。
二、特殊標識的原子
注:這里每一個都需要記住,最好達到默寫級別。記憶的時候成對記憶,\d是匹配一個0-9,那么\D 就是除了0-9以外的所有字符。
上面已經(jīng)說明的很清楚了,我們進行實驗一步一步對這些進行學習。
請你在學習的時候,對于這些原子務必達到默寫級別。因為,我們以后做實驗的時候,一點一點你就學會了。
三、\d匹配一個0-9
代碼如下:
<?php $zz = '/\d/'; $string = '床9前明月光'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
四、\D匹配一個非0-9的值
實例:代碼如下
<?php header("Content-type:text/html;charset=utf-8"); $zz = '/\D/'; $string = '121243中23453453'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
五、\w匹配一個a-zA-Z0-9_
實例如下
<?php $zz = '/\w/'; $string = '新中_國萬歲呀萬歲'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
六、\W匹配一個非a-zA-Z0-9_
實例如下
<?php $zz = '/\W/'; $string = 'afasABCWEQR44231284737'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
七、\s 匹配所有空白字符\n \t \r 空格
實例如下
<?php $zz = '/\s/'; $string = "中國萬 歲"; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
八、\S 非空字符
實例如下
<?php $zz = '/\S/'; $string = " a "; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
匹配成功。雖然上面有空格,回車和縮進。但是,有一個非空白字符a。因此,匹配成功。
九、[] 指定范圍的原子
實例如下
<?php $zz = '/[0-5]\w+/'; $string = '6a'; $string1 = '1C'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
再試一下將$string改為$string1,看看是不是匹配到了
結論:
上例中0-5匹配$string失敗,而$string1成功。因為,$string中的第一個數(shù)值為6,不在[0-5]的范圍之內。
十、[^ 字符] 不匹配指定區(qū)間的字符
代碼如下:
<?php $zz = '/[^0-9A-Za-z_]/'; $string = 'aaaaab311dd'; $string1 = '!$@!#%$#^##'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
結論:
匹配$string不成功,但是匹配$string1的時候成功。因為中括號里面有個抑揚符。
^ 抑揚符在中括號里面的作用是不準以中括號里面的字符進行匹配。
十一、總結