正则表达式 PHP

正则表达式的常用函数:

先写一个函数show,用来输出数组,使代码看起来方便,且把经常重复用到的量放在前面

function show($var=null)
{
    if(empty($var))//检测变量是否为空
    {
        echo 'null';
    }
    elseif (is_array($var)||is_object($var))//检测变量是否为数组或对象
    {
        echo '<pre>';
        print_r($var);
        echo '<pre>';
    }
    else
    {
        echo $var;
    }
    $pattern='/[0-9]/';
$subject="gyg87yuhg765t6rtfygvhfct7";
$replacement="¥";

1.

preg_match($pattern,$subject,[array&matches])和preg_match_all($pattern,$subject,[array&matches])

作用:

进行匹配,返回匹配的个数

变量:

$pattern 正则表达式,$subject目标字符串,[array&matches] 把匹配到的字符串放到一个数组中,可选

区别:

preg_match($pattern,$subject,[array&matches])*****只进行一次匹配,返回值为匹配个数,只有0和1preg_match_all($pattern,$subject,[array&matches])***匹配完全部目标数据,返回匹配个数

例:
//preg_match($pattern,$subject,[array&matches])*****只进行一次匹配,返回值为匹配个数,只有0和1
//,preg_match_all($pattern,$subject,[array&matches])***匹配完全部目标数据,返回匹配个数
$m1=$m2=array();

$t1=preg_match($pattern,$subject,$m1);
$t2=preg_match_all($pattern,$subject,$m2);

show($m1);
echo "<hr />";
show($m2);
echo "<hr />";
show($t1.'||'.$t2);
echo "<hr />";

在这里插入图片描述

2:

preg_replace($pattern,$replacement,$subject)
    
   preg_filter($pattern,$replacement,$subject)
功能:

实现查找并替换

参数:

$replacement替换成的字符

返回值:

替换后的字符串

区别:

当subject对应数组单元中没有满足正则表达式的值时,preg_replace会保留原来的数组单元,preg_filter会删除不符合表达式的数组单元,仅保留有满足表达式的单元

普通字符串二者作用差不多

$re=preg_replace($pattern,$replacement,$subject);
$fil=preg_filter($pattern,$replacement,$subject);

show($re);
echo "<br />";
show($fil);

在这里插入图片描述

对象为数组时:

$pattern_rf=array('/[0123]/','/[456]/','/[789]/');
$replacement_rf=array('啊','西','吧');
$subject_rf=array('yty65','vh1jh','hghg','8uhhj','gggy');
$re_rf=preg_replace($pattern_rf,$replacement_rf,$subject_rf);
$fil_rf=preg_filter($pattern_rf,$replacement_rf,$subject_rf);

echo "<hr />";
show($re_rf);
echo "<br />";
show($fil_rf);

在这里插入图片描述

3:

preg_grep($pattern,$subject_rf)
作用:

在目标数组中匹配并且只保留匹配到的数组的单元,相当于preg_filter取消替换功能

$gr=preg_grep($pattern,$subject_rf);
echo "<hr />";
show($gr);

在这里插入图片描述

4:

preg_split($pattern,$subject);
preg_quote($str)
作用:

preg_split通过pattern 匹配字符串,并以匹配到的字符串作为分割点分割字符串,将分割得到的若干字符串保存到一个数组中,作为函数返回值返回 preg_quote转义

$spl=preg_split($pattern,$subject);
echo "<hr />";
show($spl);
echo "<hr />";
$str='{hhhhhhhhh[]}';
show($str);
echo "<br />";
$str=preg_quote($str);
show($str);
echo "<hr />";

在这里插入图片描述
在这里插入图片描述

正则表达式的语法

1,界定符:

作用:

标志正则表达式开始和结束

类型:
//,##,{}
推荐在线工具:regexpal

在这里插入图片描述

2.原子

分为可见原子和不可见原子,可见原子即可以看见的字符串,不可见原子即看不见的字符串,例如空格,制表,回车等

3.元字符:

元字符作用
1.表示原子的筛选方式:
|,[],[^]
[]表示匹配内部元素,如;[0-9]表示匹配0-9的数字,二[^]表示匹配除[]内的元素,注意:^必须更在[后面
2.表示原子的集合

.  \d  \D  \s  \S  \w  \W

各自的作用:

  1. . :匹配除换行外的所有字符
  2. \d: 匹配0-9的数字,类似于[0-9]
  3. \D: 匹配除0-9外的所有元素,类似于[^0-9]
  4. \s \S :匹配不可见(可见)原子
  5. \w \W :匹配任意(非)字母数字下划线
4.量词

表示某个原子出现的次数
{n} ;表示某个原子恰好出现n次
{n,} :表示某个原子至少出现n次
{n,m}:表示某个原子至少出现n次,至多m次
*:表示某个原子至少出现0次
+:表示某个原子至少出现1次
:表示某个原子至少出现0次,至多1次

5.边界控制

^: 匹配字符串开始的位置
$: 匹配字符串结束的位置
匹配成功必须要以^之后的原子开始,以$之前的原子结束

6.模式单元

(pattern):模式单元中的正则表达式可以当作一个原子看待

7.修正符

1.贪婪匹配与懒惰匹配
贪婪匹配取其长,懒惰匹配(修正符:U)取其短

$pattern_xz_TL='/\d.+zjb/';
$subject_xz="uuuhytftdr677tz7tdrzjbhbhzjbbhjzjb,,,";
$matches_xz_TL=array();
preg_match($pattern_xz_TL,$subject_xz,$matches_xz_TL);
show($matches_xz_TL);
echo "<br />";
$pattern_xz_LD='/\d.+zjb/U';
$matches_xz_LD=array();
preg_match($pattern_xz_LD,$subject_xz,$matches_xz_LD);
show($matches_xz_LD);
echo "<hr />";

在这里插入图片描述

如上,使用贪婪匹配,匹配到第一个zjb后会继续匹配,直到匹配完整个字符串,若使用懒惰匹配,则匹配到第一个zjb后就直接返回

常用修正符:
U:懒惰匹配
i:忽略大小写
x:忽略空白
s:使.包含换行符,匹配所有


根据慕课网视频所写,原视频链接

源代码链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Junebao

如果你碰巧财力雄厚的话...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值