<? //s无视换行符,i不区分大小写
$data='<span>123</span>
<span>
456</span>
<Span> 789
</span>';
preg_match_all('/<span>(.*?)<\/span>/isx',$data,$str);
print_r($str);正则表达式的主要作用分割、匹配、查找、替换正则表达式函数preg_grep($mode,$str) //匹配查找,返回一个数组;
preg_match($mode,$str,$return) //在字符串中查找匹配项,返回一个数组。
preg_match_all($mode,$str,$return [,int flags])
preg_split($mode,$str [,int limit 切割多少次 [,int flags] ] ) //使用正则表达式分割字符串,并将结果以数组的形式返回(类似explode)。
preg_replace($mode,$replacement,$str [,int limit 匹配多少次]) //查找和替换子字符串(类似str_replace)
preg_quote($str) //在每个正则表达式的特殊字符前面加入一个转义字符(反斜线“\”),正则表达式的特殊字符包括:.\\+*?[^]$(){}=!<>|:正则表达式中包括的元素原子(普通字符:a-z A-Z 0-9 、原子表、转义字符)元字符(有特殊功能的字符)模式修正符(系统内置部分字符 i 、m、S、U…)转义字符 \d 包含所有数字 [0-9]\D 除所有数字外 [^0-9]\w 包含所有字符(大小写英文字母、下划线、数字) [a-zA-Z_0-9]\W 除所有字符(大小写英文字母、下划线、数字)外 [^a-zA-Z_0-9]\s 空白区域如回车、换行、分页等 [\f\n\r]\S 非空白区域如回车、换行、分页等 [^\f\n\r]元字符. 匹配任意次但不包含回车换行* 匹配任意次? 匹配 0 次或 1 次+ 匹配 1 次或多次| 选择匹配(或者)^ 匹配开头(方括号中表示非)$ 匹配尾部{m} 匹配前一个内容的重复次数为 m 次{m,} 匹配前一个内容的重复次数大于等于 m 次{m,n} 匹配前一个内容的重复次数 m 次到 n 次( ) 合并整体匹配,并放入内存,可使用 \1 \2… 依次获取模式修正符: 【/ 正则 / U 】小写i 不区分大小写小写m 匹配首内容或尾内容时采用多行识别匹配小写s 将转义回车取消视为单行匹配小写x 忽略正则中的空白大写A 强制从头开始匹配大写D 强制 $ 匹配尾部无任何内容大写U 禁止贪婪匹配,只跟踪到最近的一个匹配符并结束,常用在采集程序小写u 匹配中文解题方法总结:1. 先写出一个要匹配的字符串2. 自左向右的顺序使用正则表达式的原子和元字符拼接3. 加入模式修正符常用正则//删除一对中括号内的内容:
$str = 'abc[url]123[/url]xyz';
$pattern = '/\[url\S*\[\/url\S*\]/';
$str = preg_replace($pattern, '', $str);
echo $str . ''; //输出:abcxyz
//PHP匹配多对中括号中的内容:
$str = '这是[3]def[25]我的[26]';
$pattern = '/\[([a-z0-9]+)\]/';
preg_match($pattern, $str, $match);
print_r($match);
//匹配所有大括号里面的内容:
$str = 'abc{title}def{author}mn';
$pattern = '/{(.*)}/U';
preg_match($pattern, $str, $match);
print_r($match);
//匹配网页源代码中的图片路径:
$str = '<img alt="标题" id="pic" src="http://test.cn/avatar.jpg" />';
$pattern = '/<img.*?src="(.*?)".*?\/?>/i';
preg_match($pattern,$str,$match);
print_r($match);
//匹配当前页面的所有超链接:
$str = '<a href="http://www.test.com/a.html">跳转</a>';
$pattern = '/<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/i';
preg_match($pattern, $str, $match);
print_r($match);
//匹配邮件
$str = '12345@qq.com';
$pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i";
preg_match($pattern, $str, $match);
print_r($match);
//匹配11位手机号:
$str = '13299803211';
$pattern = "/^1(3|5|8)\d{9}$/";
preg_match($pattern, $str, $match);
print_r($match);
//匹配139开头的11位手机号码
$str = '13912345678';
$pattern = '/^139\d{8}$/';
preg_match($pattern,$str,$match);
print_r($match);
//UTF-8编码下提取字符串中的中文:
$str = 'hello 中文 byebye';
$pattern = '/[\x{4e00}-\x{9fa5}]+/u';
preg_match($pattern, $str, $match);
print_r($match); //“中文”
//替换字符串中的中文为空
$res = preg_replace($pattern,'',$str);
echo $res.’';
//分割中文字符串为等长度元素的数组(英文可以用str_split,但中文会乱码)
$str = '中文字符串';
$res = preg_split('/(?<!^)(?!$)/u', $str);
print_r($res);
//过滤网页上的所有script标记
$str = '<script type="text/javascript" src="dd.js">alert(123);</script><p style="color: red">测试php正则匹配掉js代码</p>';
$pattern = "/<script[\s\S]*?<\/script>/i"; //过滤JS标签
$pattern = "/<[\/\!]*?[^<>]*?>/si"; //过滤HTML标签
$res = preg_replace($pattern, "", $str);
echo $res.’';
//替换<b>标签为空
$str = '<b>abc</b><b>abc</b>';
$pattern = '/<b>(.*?)<\/b>/';
$res = preg_replace($pattern,'\\1',$str);
echo $res.'';
评论
172条评论句话 Lv.1 回复
哈哈哈哈
北京市 广电网
need login Lv.1 回复
感谢感谢
北京市 移动
野野不会逆向 Lv.1
Chrome 114.0.0.0
Windows 回复
感谢楼主表情,好人一生平安
中国 移动
征服 Lv.1
Chrome 94.0.4606.71
Windows 回复
支持一下,黑蜘蛛博客有你
更精彩广东省东莞市 电信
听雨挽清风 Lv.1
Chrome 113.0.0.0
Windows 回复
感谢楼主
,好人一生平安
中国 移动
111 Lv.1
Chrome 87.0.4280.141
Android 13 回复
我来了
北京市 移动
7 Lv.1
Internet Explorer
iPhone iOS 16.2 回复
我需要这个代码
北京市 移动
富士康fsd Lv.1
Chrome 86.0.4240.198
Windows 回复
广东省珠海市 电信
聪@聪& Lv.1
Chrome 111.0.0.0
Windows 回复
的撒的撒的撒的撒的撒旦
黑龙江省哈尔滨市 联通
ken Lv.1
Chrome 86.0.4240.198
Windows 回复
感谢楼主
,好人一生平安
广东省东莞市 电信