正则表达式(regular expression)描述了一种字符串匹配的模式,正则表达式的主要作用:
可以用来检查一个串是否含有某种子串
将匹配的子串做替换或者从某个串中提取符合某个条件的子串等
基本概念
•是一个特殊的公式,由原子、元字符、模式修正符组成;它也是一个字符串!只不过是一个特殊的字符串
•主要实现对字符串的匹配、分割、查找、替换等操作
正则函数
用单引号定义正则
php的正则是以文本方式声明,文本当中用"/ /"包裹正则内容,如果使用双引号,正则中的“$”会被解析为变量(要加\转义符),因此,用单引号定义正则更安全。
PCRE规则与函数
PCRE(Perl Compatible Regular Expressions )是一个Perl(一种功能丰富的计算机程序语言)兼容的正则表达式库,是以preg开头的一套函数:
函数 | 功能 |
---|---|
preg_match(正则 , 字符串 , 结果数组) | 单一匹配 结果数组: 第一个匹配到的结果 返回:匹配数量 (错误:false) |
pregmatchall(正则 , 字符串 , 结果数组) | 匹配所有 结果数组: 全部匹配到的结果 返回:匹配数量(错误:false) |
preg_replace(正则 , 替换 , 被替换字符串) | 替换 返回:替换后字符串 |
preg_split( 正则 , 字符串) | 用正则分割字符串 返回:数组 |
元字符
正则模式当中的元字符,通常都具有特殊的含义
元字符 | 说明 |
---|---|
a-z | 英文小写字母 |
A-Z | 英文大写字母 |
0-9 | 数字 |
\r \n \t | 非打印字符 |
\d | 数字,相当于0-9 |
\D | \d 取反 |
\w | 字母 数字 下划线 |
\W | \w 取反 |
\s | 空白字符 |
\S | 非空白字符 |
[ ] | 任意匹配[ ]中单个字符 |
. | 匹配任意字符(换行符除外) |
{n} | 匹配n次 |
{n,} | 匹配至少n次 |
{n,m} | 至少n次,最多m次 |
* | 匹配0个或多个,相当于{0,} |
+ | 匹配1个或多个,相当于{1,} |
? | 匹配0个或1个,相当于{0,1} |
^ | 1、匹配正则开头 2、放在[^ ],内容取反 |
$ | 匹配正则结尾 |
| | 匹配 |
( ) | 1. 分组 2.子存储 |
注意:
正则需要转义字符: ( ) { } ? * + . [ ] \ / ^ $ |
模式修正符
对一套正则模式进行调整的符号
符号 | 说明 |
---|---|
i | 不区分大小写 |
s | 忽略换行符 |
U | 反转匹配模式(贪婪/非贪婪) |
子模式与后向引用
子模式
子模式(子表达式 或 子匹配),在正则表达式中,可以使用 ( 和 ) 将模式中的子字符串括起来,以形成一个子模式。
//定义正则模式
$str = "11010519801218sss23"; //身份证号码
$reg = '/\d{6}(\d{4})(\d{2})(\d{2})/';
$n=preg_match_all($reg,$str,$res);
var_dump($n,$res);
//将小括号()内的值,单独作为数组保存起来
/*
array (size=4)
0 =>
array (size=1)
0 => string '11010519800618' (length=14)
1 =>
array (size=1)
0 => string '1980' (length=4)
2 =>
array (size=1)
0 => string '12' (length=2)
3 =>
array (size=1)
0 => string '18' (length=2)
*/
后向引用
正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。
•对一个正则表达式模式或部分模式两边添加圆括号()可以把这部分表达式存储到一个临时缓冲区中。
•所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容按顺序存储。
•存储子匹配的缓冲区编号从1开始,连续编号至最大99个子表达式。
•每个缓冲区都可以使用'\n'(或用'$n')访问,其中n为1至99的阿拉伯数字,用来按顺序标识特定缓冲区(子表达式)。
$str="<script>alert('web前端')</script>";
//$ 字符具有特定的含义。代表第 1 到第 99 个子表达式
$str=preg_replace('/<script>(.*?)<\/script>/', "$1", $str);
//结果:$str=alert('web前端')