PHP之—正則表達式

  1. PHP常用的正則表達式函數
    在這裏插入圖片描述
    $parttern:正則表達式
    $subject:匹配的內容
    (1)preg_match 和preg_match_all
    returnpregmatchallpregmatchreturn:返回值爲匹配到結果的次數 preg_match_all會都匹配所有的結果,preg_match匹配到第一個相同的就進行返回,最多匹配一次,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);   

下面是data1data1和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. 正則表達式的語法
    在這裏插入圖片描述
    (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)元字符
    在這裏插入圖片描述
    下圖是匹配
    在這裏插入圖片描述
    也可以寫成下面這種新三形勢
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  2. 實戰
    (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);vardump(matches); var_dump(matches); //輸出匹配結果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章