正则表达式
一、正则表达式语法规则
描述一类字符串的特征,然后通过这类特征可以配合一些特定的函数,来完成对字符串更加复杂的一系列操作。
普通字符和特殊字符组成的字符串
比如,preg_match_all:按指定的正则表达式,在给定的字符串中进行搜索,匹配到符合特征的部分取出来
<?php
$pattern='/test/';
$str='abctestgtest kjdlrk';
var_dump(preg_match_all($pattern,$str,$arr));
?>
二、定界符
一般习惯使用正斜线 “/” 来作为定界的字符,前后一致
三、普通字符
四、元字符
比如,/d:代表十进制数字0-9,中的任意一个数字
<?php
$pattern='/t\dst/';
$str='abct1stgkjdlrk';
var_dump(preg_match_all($pattern,$str,$arr));
?>
\D 匹配除十进制数字以外的任何一个字符
\s 匹配任意一个空白字符,如换行符,换页符,空格,制表符等
\S 匹配除空白字符以外的任何一个字符
\w 匹配任意一个数字,字母或下划线
\W 匹配除数字,字母或下划线以外的任何一个字符
. 匹配除换行符以外的任意一个字符,如果真的只是想匹配一个 . 那么在正则表达式的时候,把 . 使用 / 来转义。
“*” 匹配0次,或1次,或多次其前面的字符
放在 * 前面的字符可以出现0次,1次或多次:
<?php
$pattern='/te*st/';
$str='abcteeeeeeeest';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>
“+” 匹配1次或多次其前面的字符
“?” 匹配0次或1次其前面的字符
{n} 表示前面的字符恰好出现n次:
<?php
/*
元字符:{n} n代表自己写的一个数字,表示其千米那字符恰好出现n次
放在{n}前面的那个字符正好出现n次
*/
$pattern='/te{1}st/';
$str='abctest';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>
{n,} 表示前面的字符不少于n次
{n,m} 表示前面的字符至少出现n次,至多出现m次
…………
. 与 * 配合使用 贪婪匹配
<?php
/*
.与*配合使用默认情况下是 贪婪匹配
.*后面加上?可以解决贪婪匹配的问题,变成懒惰匹配
*/
$pattern='/t.*t/';
$str='abctjdtkafhkahkwt';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>
^或\A 匹配字符串开始位置
$pattern='/^test/';
$str='testabc'; //必须以t开头
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
$或\Z 匹配字符串结束位置
| 匹配两个或多个模式、
$pattern='/test|abc|aaa/';
$str='testkjafkwdabcjjkafkdaaa';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
[] 匹配方括号中的任意一个字符
$pattern='/t[abce]st/';
$str='testkjtastafkwtcstdabc';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
[^] 匹配方括号中字符以外的任意一个字符
() 将括号中的内容作为一个整体以便将其中的内容获取到,在正则表达式中,可以使用圆括号将某一段括起来,在圆括号的后面部分,我们可以使用 \ 数字来代表圆括号部分所匹配到的内容
$pattern='/t(e)st\\1/'; // \\1就代表第一个圆括号部分所匹配到的内容'/teste/'
$str=' teste ';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
当()里面是 . 时:
$pattern='/t(.)(.)t\\1\\2/'; // \\1就代表第一个圆括号部分所匹配到的内容
$str=' t1ct1c ';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
五、模式修正符
i 在和模式进行匹配时不区分大小写;
m 多行匹配, 使用条件:
1)目标字符串中必须包含“\n”,在字符串中出现“\n”就表示新的一行开始
2) 正则表达式中必须出现^或$
s 若设定了此修正符,那么 . 将匹配所有的字符包括换行符
u 禁止贪婪匹配
六、与正则表达式配合的函数
1.preg_match 执行一个正则表达式匹配
参数说明:
1)正则表达式
2)目标字符串
3)放一个变量,执行完之后,里面会有匹配到的部分以及等等一些数据
4)可以传PREG_OFFSET_CAPTURE进入,默认传的是0
5)可以传一个值,来表示从目标字符串的哪个位置开始搜索(单位是字节)。
$pattern='/t(.*?)st/'; //
$str=' test tfjhkst test tkfsjksdhst ';
var_dump(preg_match($pattern,$str,$arr,PREG_OFFSET_CAPTURE));
var_dump($arr);
2.preg_match_all
参数说明:
前三个同上
4)可选
PREG_PATTERN_ORDER
PREG_SET_ORDER
PREG_OFFSET_CAPTURE
5)可以传一个值,来表示从目标字符串的哪个位置开始搜索(单位是字节)
$pattern='/t(.*?)st/';
$str=' test tfjhkst test tkfsjksdhst ';
var_dump(preg_match_all($pattern,$str,$arr,PREG_OFFSET_CAPTURE));
var_dump($arr);
3.preg_replace 执行一个正则表达式的搜索和替换