PHP正则表达式
1、正则表达式作用
字符串搜索和匹配的工具。
(1)* 正则表达式通配符。
Windows搜索,*.jpg
Linux命令,ls -l /dev/sda*
(2)正则表达式验证邮箱
2、PHP中的正则表达式
//php对象打印
if(is_array($var) || is_object($var)){
print_r($var);
}else{
echo $var;
}
PHP中正则表达式的函数
(1)preg_match,preg_match_all
作用:在目标字符串中查找正则表达式匹配
用法:
$num = preg_match($pattern,$subject,array &$matches)
返回值:
$num :返回匹配的个数。
$matches:返回匹配的对象。
$pattern = ‘/[0-9]/‘;
$subject = ‘wsijd09dfasd9dsf8fdas‘;
$m1=$m2=array();
preg_match($pattern,$subject,$m1);
preg_match_all($pattern,$subject,$m2);
$m1[0] = 0;//一维数组
//$m2二维数组,$m2[0]--> array(0,9,9,8)
(2)preg_replace,preg_filter
作用:在目标字符串中查找正则表示式,替换成其他字符串
普通字符串替换
str_replace(find,replace,string,count)
用法:
$str1 = preg_replace($pattern,$replacement,$subject);
$str2 = preg_filter($pattern,$replacement,$subject);
preg_filter特殊用法
$pattern =array("/[0123]/","/[456]/","/[789]/");
$subject = array(‘weuy‘,‘r3ui‘,‘78as83‘,‘s‘,‘0ck9‘);
$replacement= array(‘慕‘,‘女‘,‘神‘);
$array1 = preg_replace($pattern,$replacement,$subject);
$array2 = preg_filter($pattern,$replacement,$subject);
//$array1 里面会返回全部数组,$array2里面元素只有发生匹配的才返回。
(3)preg_grep
用法,只匹配不替换。
preg_grap($pattern,array $input)
$pattern =array("/[0123]/","/[456]/","/[789]/");
$subject = array(‘weuy‘,‘r3ui‘,‘78as83‘,‘s‘,‘0ck9‘);
(4)preg_splite
用法,分割目标字符串。
$array = preg_splite($pattern,$subject);
explode($str,$subject);
(5)preg_quote
用法,对目标字符串中可能存在的正则表达式运算符进行转义。
$str = ‘qwer{asdf}[1234]‘;
$str = preg_quote($str);
//qwer\{asdf\}\[1234\]
总结
preg_match-验证表单
preg_replace-非法词语过滤
3、正则表达式基本语法
(1)界定符
/[0-9]/
*http://regexpal.com/
(2)原子,通常是unicode编码中的一个字符
可见原子,不可见原子。
汉字,‘\u7ea6\u5417‘-->‘约吗‘,利用转化之后的编码进行匹配。
运算符符号,转义\\,\$,
不可见原子,空格、tab制表符、回车。
空格-->键盘空格,tab制表符-->\t,回车-->\n。
(3)元字符
原子的筛选方式,归类缩写。
-| 匹配两个或者多个,[^\n]
-[] 匹配括号中的任意一个
-[^] 排除方括号中的原子之外
Duang~|duang~ 匹配两种
[Dd]uang~,[]中拿出一个。
[^789],必须是[^样式。[78^9]意义完全不同。
[a-zA-Z0-9_]连续的写法。
. 除了换行符之外的全部字符
\d 任意十进制数字
\D 非十进制数字
\s 不可见原子
\S 可见原子
\w 任意数字字母_
\W 非数字、字母_
(4)量词
{n},表示其前面的原子恰好出现n次
{n,} 最少出现n次
{n,m} 出现n到m次
*,0次1次多次{0,}
+,1次多次{1,}
?,0次1次{0,1}
例子 555->5{3};[a-zA-Z]{2},连续两个字符;\w{4};\w*,只要是数字字母连续匹配在一起的;
(5)边界控制和模式单元
l ^ 匹配字符串开始的位置
l $ 匹配字符串结束的位置
l () 其中的整体为一个原子
例子:***Duang
^Duang~,就不会匹配。此时强制D之前不会出现任何字符。~强制目标字符串必须以g结束,后面不可以有任意字符。
(D|d)uang,[Dd]uang
Duang duang
(D|d)当做一个原子。
(6)修正模式
l 贪婪匹配
l 懒惰模式
发生多种匹配情况是,贪婪匹配比较长的,懒惰匹配短的。
例子:
$pattern = ‘/imooc.+123/‘;
$subject = ‘i love imooc__123123123‘;
$matches = array();
preg_match($pattern,$subject,$matches);
$matches[0]=‘imooc__123123123‘;
默认情况下,是采用贪婪匹配。
$pattern =‘/imooc.+123/U‘;
$matches[0]=‘imooc__123‘;
- U-懒惰模式
- i-忽略大小写
- x-忽略空白
- s-‘.‘匹配换行符在内的所有字符
例子:
$pattern =‘/i Mo oc.+123/Uix‘;
$subject = ‘I love imooc__123123123‘;
x忽略正则表达式中的空白字符