php正則表達示的定界符
PHP的正則表達示定界符的規定如下:
定界符,不能用a-z A-Z 0-9 ?其他的都可以用。必須成對出現,有開始就有結束。
我們來例幾個例子:
- /中間寫正則/ 正確
- %中間寫正則% 正確
- ^中間寫正則^ 正確
- @中間寫正則@ 正確
- (中間寫正則) 錯誤
- A中間寫正則A 錯誤
原子
原子是正則表達示里面的最小單位,原子說白了就是需要匹配的內容。一個成立的正則表達示當中必須最少要有一個原子。
說明:我們見到的空格、回車、換行、0-9、A-Za-z、中文、標點符號、特殊符號全為原子。
preg_match 函數
int preg_match ( string $正則 , string $字符串 [, array &$結果] )
功能:根據$正則變量,匹配$字符串變量。如果存在則返回匹配的個數,把匹配到的結果放到$結果變量里。如果沒有匹配到結果返回0。
結果變量的值是一個數組,沒有匹配到則是一個空數組。
<?php
//定義一個變量叫zz,放正則表達示。為了方便大家記憶,如果你英文比較ok,建議把變量名還是寫成英文的$pattern
$zz = '/a/';$string = 'ddfdjjvi2jfvkwkfi24';if(preg_match($zz, $string, $matches)){echo '匹配到了,結果為:';var_dump($matches);
}else{echo '沒有匹配到';
}?>
特殊標識的原子
原子 | 說明 |
---|---|
\d | 匹配一個0-9 |
\D | 除了0-9以外的所有字符 |
\w | a-zA-Z0-9_ |
\W | 除了0-9A-Za-z_以外的所有字符 |
\s | 匹配所有空白字符\n \t \r 空格 |
\S | 匹配所有非空白字符 |
[ ] | 指定范圍的原子 |
我們看看 [] 指定范圍的原子
<?php$zz = '/[0-5]\w+/'; //匹配0-5的任意一個數字和最少一個字符$string = '6a';$string1 = '1C';if(preg_match($zz, $string, $matches)){echo '匹配到了,結果為:';var_dump($matches);
}else{echo '沒有匹配到';
}// $string 匹配失敗// $string1匹配成功?>
[^ 字符] 不匹配指定區間的字符
<?php$zz = '/[^\w]/'; //匹配一個非字符$string = 'aaaaab311dd';$string1 = '!$@!#%$#^##';if(preg_match($zz, $string1, $matches)){echo '匹配到了,結果為:';var_dump($matches);
}else{echo '沒有匹配到';
}// $string 匹配失敗// $string1匹配成功?>
原子 | 等價式 |
---|---|
\w | [a-zA-Z0-9_] |
\W | [^a-zA-Z0-9_] |
\d | [0-9] |
\D | [^0-9] |
\s | [ \t\n\f\r] |
\S | [^ \t\n\f\r] |
php正則表示中的元字符
拋出問題: \d 代表匹配一個字符。而我現在想要匹配十個八個,任意多個數字腫么辦?
這個時候我們就要用到元字符。在使用原子的時候,發現只能夠匹配一個字符,可是要匹配多個字符就出現了問題。
這個時候,我們需要借助元字符來幫我們修飾原子,實現更多的功能。
元字符 | 功能說明 |
---|---|
* | 是代表匹配前面的一個原子,匹配0次或者任意多次前面的字符。 |
+ | 匹配一次或多前前面的一個字符 |
? | 前面的字符可有可無【可選】 有或沒有 |
. | 更標準一些應該把點算作原子。匹配除了\n以外的所有字符 |
| | 或者。注:它的優先級最低了。 |
^ | 必須要以抑揚符之后的字符串開始 |
$ | 必須要以$之前的字符結尾 |
\b | 詞邊界 |
\B | 非邊界 |
{m} | 有且只能出現m次 |
{n,m} | 可以出現n到m次 |
{m,} | 至少m次,最大次數不限制 |
() | 改變優先級或者將某個字符串視為一個整體,匹配到的數據取出來也可以使用它 |
php 正則達達示中的模式修正符
如果abc在第二行的開始處如何匹配?
我不希望正則表達示特別貪婪的匹配全部,只匹配一部份怎么辦?
常用的模式匹配符有:
|模式匹配符 |功能
|--|--||
|i |模式中的字符將同時匹配大小寫字母.
|m |字符串視為多行
|s |將字符串視為單行,換行符作為普通字符.
|x |將模式中的空白忽略.
|A |強制僅從目標字符串的開頭開始匹配.
|D |模式中的美元元字符僅匹配目標字符串的結尾.
|U |匹配最近的字符串.
m 視為多行
<?php
$pattern = '/^a\d+/m'; //多行匹配開頭a和一個數字
$string = "我的未來在自己手中我需要不斷的努力
a9是一個不錯的字符表示
怎么辦呢,其實需要不斷奮進";
if (preg_match($pattern, $string, $matches)) {echo '匹配到了,結果為:';var_dump($matches);
} else {echo '沒有匹配到';
}// 匹配成功 'a9'
?>
s 識為一行
<?php$pattern = '/新的未來.+\d+/';$string = '新的未來
987654321';if (preg_match($pattern, $string, $matches)) {echo '匹配到了,結果為:';var_dump($matches);
} else {echo '沒有匹配到';
}
//沒有匹配到//-----------------------------------------------------//
$pattern = '/新的未來.+\d+/s'; //后面加了s$string = "新的未來
987654321";if (preg_match($pattern, $string, $matches)) {echo '匹配到了,結果為:';var_dump($matches);
} else {echo '沒有匹配到';
}// 匹配成功 : "新的未來 987654321"
?>
常用正則函數
函數名 | 功能 |
---|---|
preg_filter | 執行一個正則表達式搜索和替換 |
preg_grep | 返回匹配模式的數組條目 |
preg_match | 執行一個正則表達式匹配 |
preg_match_all | 執行一個全局正則表達式匹配 |
preg_replace_callback_array | 傳入數組,執行一個正則表達式搜索和替換使用回調 |
preg_replace_callback | 執行一個正則表達式搜索并且使用一個回調進行替換 |
preg_replace | 執行一個正則表達式的搜索和替換 |
preg_split | 通過一個正則表達式分隔字符串 |