正则表达式的常用函数:
先写一个函数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
各自的作用:
.
:匹配除换行外的所有字符\d
: 匹配0-9的数字,类似于[0-9]
\D
: 匹配除0-9外的所有元素,类似于[^0-9]
\s \S
:匹配不可见(可见)原子\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
:使.
包含换行符,匹配所有