PHP正则表达式
2022-01-24 09:11 天心PHP 阅读(40) 评论(0) 编辑 收藏 举报正则表达式的主要作用是:分割、匹配、查找、替换
正则表达式中包括的元素:
原子(普通字符:a-z A-Z 0-9 、原子表、转义字符)
元字符(有特殊功能的字符)
模式修正符(系统内置部分字符 i 、m、S、U...)
转义字符
1 2 3 4 5 6 | \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] |
元字符
1 2 3 4 5 6 7 8 9 10 11 | . 匹配任意次但不包含回车换行 * 匹配任意次 ? 匹配0次或1次 + 匹配1次或多次 | 选择匹配(或者) ^ 匹配开头(方括号中表示非) $ 匹配尾部 {m} 匹配前一个内容的重复次数为m次 {m,} 匹配前一个内容的重复次数大于等于m次 {m,n}匹配前一个内容的重复次数m次到n次 ( ) 合并整体匹配,并放入内存,可使用\1 \2...依次获取 |
模式修正符: 【/正则/U 】
1 2 3 4 5 6 7 8 | 小写i:不区分大小写 小写m:匹配首内容或尾内容时采用多行识别匹配 小写s:将转义回车取消视为单行匹配 小写x:忽略正则中的空白 大写A:强制从头开始匹配 大写D:强制$匹配尾部无任何内容 大写U:禁止贪婪匹配,只跟踪到最近的一个匹配符并结束,常用在采集程序 小写u:匹配中文 |
Perl正则表达式函数:
1 2 3 4 5 6 | 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) //在每个正则表达式的特殊字符前面加入一个转义字符(反斜线“\”),正则表达式的特殊字符包括:.\\+*?[^]$(){}=!<>|: |
解题方法总结:
1.先写出一个要匹配的字符串
2.自左向右的顺序使用正则表达式的原子和元字符拼接
3.加入模式修正符
【常用正则表达式】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | //删除一对中括号内的内容: $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. '' ; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!