PHP之—正则表达式

本文介绍了PHP中常用的正则表达式函数,包括preg_match、preg_match_all、preg_replace、preg_filter、preg_grep和preg_split的功能和区别,并提供了示例。还提到了preg_quote用于转义正则表达式运算符,以及正则表达式的界定符、原子、元字符等基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. PHP常用的正则表达式函数
    在这里插入图片描述
    $parttern:正则表达式
    $subject:匹配的内容
    (1)preg_match 和preg_match_all
    r e t u r n : 返 回 值 为 匹 配 到 结 果 的 次 数 p r e g m a t c h a l l 会 都 匹 配 所 有 的 结 果 , p r e g m a t c h 匹 配 到 第 一 个 相 同 的 就 进 行 返 回 , 最 多 匹 配 一 次 , return:返回值为匹配到结果的次数 preg_match_all会都匹配所有的结果,preg_match匹配到第一个相同的就进行返回,最多匹配一次, returnpregmatchallpregmatchreturn只可能返回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);   

下面是 d a t a 1 和 data1和 data1data2的输出结果
可以看到清楚的对比
可以看懂清楚的对比,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 = ‘runoob@runoob.com’; //邮箱地址
    KaTeX parse error: Can't use function '\.' in math mode at position 26: …"/^[_a-z0-9-]+(\̲.̲[_a-z0-9-]+)*@[…/";
    preg_match($pattern, $mail, m a t c h e s ) ; v a r d u m p ( matches); var_dump( matches);vardump(matches); //输出匹配结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值