理解PHP正则表达式

PHP正则表达式

一、正则表达式语法规则

​ 规则表达式描述了一类字符串的特征,通过这个特征与特定的函数配合,对其他的字符串进行匹配、查找、替换以及分割操作!

这类字符串的特征是由一个或者多个

1、普通字符(比如a到z)、
2、元字符(有特殊功能的字符,比如:*,+,?等)。

等组成的一个字符串!

例如:‘/a/’ ,就是普通字符,/ 是定界符(表示正则表达式的开始和结束)

简单概括:正则表达式就是描述了一类字符串的特征,
然后通过这个特征可以配合一些特定的函数,来完成对字符串的更复杂的操作!
    是由普通字符和特殊字符组成的字符串。
简单例子:
<?php
    $pattern='/text/';
    $str='abc';
    var_dump(preg_match_all($pattern,$str,$arr));
    //preg_match_all是正则表达式的函数。还有很多类似函数,之后介绍。

    ?>
返回:int(0) 

那么以上代码的意思也就显而易见了。就是将pattern中的text在str中搜索。将结果存入arr中。

<?php
    $pattern='/text/';
    $str='abctextafklajtext';
    var_dump(preg_match_all($pattern,$str,$arr));
    ?>
返回:int(2) 

此时str中有两个text所以返回2.

<?php
    $pattern='/text/';
    $str='abctextafklajtext';
    var_dump(preg_match_all($pattern,$str,$arr));
    var_dump($arr);
    ?>
返回:int(2) 
array(1) { [0]=> array(2) { [0]=> string(4) "text" [1]=> string(4) "text" } }
 //多输出了arr的值
定界符

我们一般用正斜线“/”作为定界的字符。

当然除了字母、数字、和反斜线以外的字符都可以作为定界符,比如:#,!,{},|,都可以!

定界符要放在正则表达式的起始位置,前后一致!

<?php
    $pattern='#text#';
    $str='abctextafklajtext';
    var_dump(preg_match_all($pattern,$str,$arr));
    var_dump($arr);
    ?>
普通字符

比如:a-z,A-Z,0-9,双引号,单引号,他们没有特殊含义

元字符

元字符是指在正则表达式中有特殊含义的字符,常用的元字符有:


# 匹配非打印字符
$pattern = "/\n/"

# 匹配0-9数字
$pattern = "/\d/";
# 匹配除了0-9的数组
$pattern = "/\D/";

# 匹配数字+大小写字母+下划线
$pattern = "/\w/";
# 匹配除了数字、大小写字母、下划线
$pattern = "/\W/";

# 匹配空白符(换行、缩进、空格)
$pattern = "/\s/";
# 匹配除了空白符的字符
$pattern = "/\S/";

# `*` 代表匹配前面的子符出现0、1、或多次
$pattern = "so*u";
# `+` 代表匹配前面的子符出现1次、或多次
$pattern = "so+u";
# `?` 匹配前面的一个子符出现0次或者1次
$pattern = "hao?sou";

# 匹配除了换行符的任意字符
$pattern = "/./";
# 如果只想匹配 `.`,特殊含义的字符要转义。
$pattern = "/\./"

# `|`代表或者
$pattern = "/a|b|c/";

# 匹配前面的一个字符恰巧出现n次;{n}
$pattern = "/hao{2}sou/";
# 匹配前面的字符应该大于等于n次。{n,}
$pattern = "/hao{2, }sou/";
# 匹配出现2-5次
$pattern = "/hao{2, 5}sou/";

# `^` 必须以该字符开头
$pattern = "/^aaa/";

# `$` 必须以该字符结尾
$pattern = "/aaa$/";

# 严格模式
# 必须严格只能匹配aaa。
$pattern = "/^aaa$/";

# a | b | c
$pattern = "/[abc]/";
# 除了a,b,c
$pattern = "/[^abc]/";

# `()`可以看做一个整体,还可以做反向引用
# 比如要匹配协议头为http、https、ftp
$pattern = "/(http|https|ftp):\/\//";

# 匹配除了空白符的任意字符
$pattern = "/.*/";

# `.*`贪婪模式
$str = "&lt;b&gt;abc&lt;/b&gt;&lt;b&gt;abc&lt;/b&gt;";
$pattern = "/&lt;b&gt;.*&lt;/b&gt;/";
# `.*?`取消贪婪模式
$pattern = "/&lt;b&gt;.*?&lt;/b&gt;/";
或:
$pattern = "/&lt;b&gt;.*&lt;/b&gt;/U";
<?php
    $pattern='/t\dxt/';
    $str='abct1xt';
    var_dump(preg_match_all($pattern,$str,$arr));
    var_dump($arr);
    ?>
返回:int(1) array(1) {  [0]=>  array(1) {    [0]=>    string(4) "t1xt"  } }

说明t1xt被找到了,所以t2xt 也是一样的。

可以逐渐体现正则表达式的强大

正则表达式函数:
preg_match()          |    进行正则表达式匹配
preg_match_all()      |    进行全局正则表达式匹配
preg_replace()        |    执行正则表达式的搜索和替换
preg_split()          |    用正则表达式分割字符串
preg_grep()           |    返回与模式匹配的数组单元
preg_replace_callback |    用回调函数执行正则表达式的搜索和替换
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值