PHP發展基礎教程之正規表示式中的原子

一、原子

原子是正則表達示裡面的最小單位,原子說白了就是需要匹配的內容。一個成立的正規表示示當中必須最少要有一個原子。

所有可見不可見的字元就是原子

註:我們見到的空格、回車、換行、0-9、A-Za-z、中文、標點符號、特殊符號全為原子。

在做原子的實例前我們先來講解一個函數,preg_match:

語法:

int preg_match ( string $正規, string $字串[, array &$結果] )

功能:根據$正規變量,匹配$字串變數。如果存在則回傳符合的個數,把符合的結果放到$結果變數裡。如果沒有符合到結果回傳0

註:上面是preg_match常用的主要幾個參數。我在上面將另外幾個參數沒有列出來。因為,另外兩個參數太不常用了。

我們來透過程式驗證:

#實例:程式碼如下

<?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。只不過我們的肉眼不可見,看不到這個字串而已。

二、特殊標識的原子

19.png

#:這裡每一個都需要記住,最好達到默寫等級。記憶的時候成對記憶,\d是匹配一個0-9,那麼\D 就是除了0-9以外的所有字元。

上面已經說明的很清楚了,我們進行實驗一步一步對這些進行學習。
請你在學習的時候,對於這些原子務必達到默寫等級。因為,我們以後做實驗的時候,一點一點你就學會了。

三、\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中的第一個數值為6,不在[0-5]的範圍內。

十、[^ 字元] 不符合指定區間的字元

#程式碼如下:

<?php

$zz = '/[^0-9A-Za-z_]/';

$string = 'aaaaab311dd';

$string1 = '!$@!#%$#^##';

if(preg_match($zz, $string, $matches)){
    echo '匹配到了,结果为:';
    var_dump($matches);
}else{
    echo '没有匹配到';
}

?>

##結論:

匹配$string不成功,但是匹配$string1的時候成功。因為中括號裡面有個抑揚符。

^ 抑揚符在中括號裡面的作用是不准以中括號裡面的字元進行比對。

十一、總結

20.png#

繼續學習
||
<?php //定义一个变量pattern,存放正则表达式 $pattern = '/a/'; //待搜素字段 $string = 'ddfdjjvi2jfvkwkfi24'; //判断,如果匹配到了,输出$matcges的值 if(preg_match($pattern, $string, $matches)){ echo '匹配到了,结果为:'; var_dump($matches); }else{ echo '没有匹配到'; } ?>