应用场景:邮箱验证、URL地址验证、模板引擎的编写、手机、银行卡匹配、修改配置文件等
如果PHP本身有解决查找替换的内置函数,尽量别用正则,效率低
定界符
/abc/
#abc#
-abc-
哪些不能作为定界符?
A-Z 、 a-z、 0-9 、空格、反斜线\ 推荐使用/ /
<?php$str='abcde';$pattern='/ab/';var_dump(preg_match($pattern, $str, $match));//int 1var_dump($match);//ab?>
什么是原子?
<?php$str='abc0def';//$pattern='/ab/'; //切记要写定界符 原子是正则表达式最小的东西a-z,A-Z,0-9,空格,下划线$pattern='/\d/'; //0,\d表示0-9之间的数字,\D匹配除0-9之间的东西都可以匹配到var_dump(preg_match($pattern, $str, $match));//int 1 preg_match(写好的规则, 从哪找, 结果给谁) 只要匹配出来一个就不会继续往下找var_dump($match);//ab?>
\d : 匹配0-9之间的数字(digital)\D : 匹配出来0-9之间所有字符\w : 匹配数字字母下划线(word)\W : 匹配非数字字母下划线\s : 匹配空格、回车、tab、换行(space)\S : 与\s相反
原子表:可以取范围
[a-z]
抑扬符:^(取反)
[^a-z] 表示非a-z的任意字符都可以匹配到
“.”表示所有字符,除了\n(除了回车符以外的字符都能匹配到)
“*”,修饰前面的一个原子,如果有或没有都会匹配到,前面那个原子没有也会匹配到,匹配值为空
“+”,匹配一次或者是多次
“?”,匹配0次或者1次
“{0,2}”,出现0次或两次 {n,m}
<?php$str='aaaaabc0def';$pattern='/a+/';var_dump(preg_match($pattern, $str, $match));//会匹配到aaaaa
<?php$str='aaaaabc0def';$pattern='/a{0,2}/';//aavar_dump(preg_match($pattern, $str, $match));//会匹配到aaaaa
“/^a/” 表示以a开始(^写在中括号里面就是取反,不写在中括号里面就是以…开始)
“/^af$/”表示以a开始以f结束(af)
“/^a.+f$/”(.表示除换行符以外所有字符,+表示1次或者多次,这样就可以全部匹配出来,如aaaaabc0def)
修饰符:
i:不区分大小写
m:视为多行(multiple)
$str="\bcd /n abc\m"; //单引号不解释转义字符,这里要用双引号 m:视为多行$pattern='/^abc/'; //表示以abc开头var_dump(preg_match($pattern, $str, $match));//匹配成功'abc'
s:视为单行(哪怕有换行,都是视为1行)(single)
U:取消贪婪($str=kajs hhhhhhhhhsjk, $pattern=’/\h+/U’,不加U会匹配hhhhhhhhh,加了会匹配到h )
URL地址验证:
<?php//URL验证$str='http://www.baidu.com';$pattern='/(http|https)?(:\/\/)?(\w+.?)(\w+.?)(\w+.?)/';//括号括起来表示优先级, .?表示.可有可无if(preg_match($pattern, $str, $match)){echo '匹配成功';var_dump($match);}else{echo 'fail';}?>
正则函数
preg_match_all($pattern, $str, $matchs) //匹配所有
preg_replace();//查找并替换
$str='<div>你上我好大家好</div>';$pattern='/<div>(.*)</div>/';$replace='<h1>我是被替换以后的</h1>';$newStr=preg_replace($pattern,$replace,$str);var_dump($newStr);echo $newStr
模板引擎原理与使用
实现HTML代码和PHP代码分离
