- PHP常用的正則表達式函數
$parttern:正則表達式
$subject:匹配的內容
(1)preg_match 和preg_match_all
return只可能返回1或0.
示例:
//正則表達式
//匹配0-9中的任意一個數字
$pattern = '/[0-9]/';
$subject = 'zhao9hfhf7shshsh0shyune8';
$data1 = preg_match($pattern,$subject,$res1);
$data2 = preg_match_all($pattern,$subject,$res2);
var_dump($data1.'--'.$data2); //輸出1--4,就是$data1匹配次數爲,$data2匹配次數爲4
(2)preg_replace和preg_filter
匹配到相應的結果並且進行替換,兩個函數非常相似,具體區別是什麼繼續往下看。
$data1 = preg_filter($pattern,$replace,$subject); //zhao你真棒hfhf你真棒shshsh你真棒shyune你真棒
$data2 = preg_replace($pattern,$replace,$subject); //zhao你真棒hfhf你真棒shshsh你真棒shyune你真棒
這時候看兩個函數輸出是一模一樣 的,再繼續往下看
$pattern = ['/[0-2]/','/[4-6]/'];
$subject = 'zhao9hfhf4shshsh0shyune8';
$replace = '你真棒啦';
$data1 = preg_filter($pattern,$replace,$subject);
$data2 = preg_replace($pattern,$replace,$subject);
var_dump($data1); //zhao9hfhf你真棒啦shshsh你真棒啦shyune8
var_dump($data2); //zhao9hfhf你真棒啦shshsh你真棒啦shyune8
這時候看起來也沒什麼不一樣,再看一下
//意思就是把帶有0-2的匹配出來替換成你,4-6的替換成真
$pattern = ['/[0-2]/','/[4-6]/'];
$subject = 'zhao9hfhf4shshsh0shyune8';
$replace = ['你','真'];
$data1 = preg_filter($pattern,$replace,$subject);
$data2 = preg_replace($pattern,$replace,$subject);
var_dump($data1); //zhao9hfhf真shshsh你shyune8
var_dump($data2); //zhao9hfhf真shshsh你shyune8
這時候兩個函數也是一樣的
$pattern = ['/[0-2]/','/[4-6]/'];
$subject = ['zhao9','hfhf4sh'];
$replace = ['你','真'];
$data1 = preg_filter($pattern,$replace,$subject);
$data2 = preg_replace($pattern,$replace,$subject);
var_dump($data1);
var_dump($data2);
下面是data2的輸出結果
可以看懂清楚的對比,preg_filter只輸出進行替換後的字符串,preg_replace輸出替換後和沒有替換的字符串
(3)preg_grep:只做匹配
$pattern = '/[0-2]/';
$subject = ['zh0ao9','hfhf1sh','hj8'];
$replace = ['你','真'];
$data1 = preg_grep($pattern,$subject);
var_dump($data1);
下面是輸出值,找到並輸出$subject中匹配的字符串
(4)preg_split
升級版explode函數,把一個字符串進行分割並且組成一個新的數組
$pattern = '/[0-2]/';
$subject = 'zh0ao9hfhf1shhj8';
$data1 = preg_split($pattern,$subject);
var_dump($data1);
遇見0分割,遇見了1分割
(5)preg_quote
把正則表達式中運算符進行轉義
//平時不常用
$str = 'zhao12{6767}\86h';
$data1 = preg_quote($str);
var_dump($data1); //'zhao12\{6767\}\\86h'
- 正則表達式的語法
(1)界定符
本質也是字符串,可以使用/、{}、#
如:/[0-9]/,#[0-9]#,{[0-9]}
注意:大括號也是一個轉義符爲了產生歧義儘量少用
(2)工具:http://reg.1zdz.cn/
(3)原子
可見原子是指Unicode編碼中用鍵盤輸出後肉眼可見的字符。
包括:1、標點;2、英文字母數字;3、漢字,日文,阿拉伯文等其他語言文字;4、∑,∈,≌等數理化公式符號;5、其他可見字符。
由於編碼格式不一樣,漢字儘量使用unicode進行編碼
不可見原子就是Unicode編碼中用鍵盤輸出後肉眼不可見的字符。
例如:1、換行符:\n;2、回車:\r;3、製表符:\t;4、空格;5、其他不可見的符號。
(4)元字符
下圖是匹配
也可以寫成下面這種新三形勢
- 實戰
(1)非空
.+
(2)浮點數匹配
保留兩位小數的浮點數
(3)手機號匹配
1(3|4|5|7|8)\d{10}
(4)匹配郵箱
$mail = ‘[email protected]’; //郵箱地址
KaTeX parse error: Can't use function '\.' in math mode at position 26: …"/^[_a-z0-9-]+(\̲.̲[_a-z0-9-]+)*@[…/";
preg_match($pattern, $mail, matches); //輸出匹配結果