3.正则表达式中 什么是模式修正符、知道什么是贪婪匹配!
2021/5/18 13:25:43
本文主要是介绍3.正则表达式中 什么是模式修正符、知道什么是贪婪匹配!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
作者:极客小俊
把逻辑转变成为代码的技术博主
我们接着上一节的内容继续说正则…
模式修正符 或者叫 模式单元
语法: /原子+元字符+量词/模式修正符号 或者说 /正则表达式/模式修正符
在php中模式修正符也叫修饰符,包含:i、m、s、U、e 模式修正符必须配合正则函数一起使用才有意义
例如: “/<img\sclass="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original=".?”/>/iU"
1. 模式修正符就是几个字母
2. 可以一次使用一个,每一个具一定的意义, 也可以连续使用多个
3. 是对整个正则表达式调优使用, 也可以说是对正则表达式功能的扩展
例如:
"/abc/" 只能匹配小写字母 abc
"/abc/i" 可以不区分大小写匹配 ABC abc Abc ABc AbC
模式修正符在php手册中查找如下位置:
常用模式修正符如下:
i : 表示在和模式进行匹配进不区分大小写、执行对大小写不敏感的匹配
m : 将字符串视为多行 视为多行后,任何一行都可以以什么开始或以什么结束 ^ 和 $
s : 将字符串视为单行、 如果没有使用这个模式修正符号时, 元字符中的"."默认不能匹配换行符号, 也就是说如果把一个字符串视为单行、那么这个换行符也就是一个普通符号了,不代表换行的意思了 ,所以 . 也就可以匹配上换行符了! [这里字符串是双引号哦]
x : 表示模式中的空白忽略不计,再说一次是正则模式中的空白 不是字符串中的!
e : 正则表达式必须使用在preg_replace替换字符串的函数中时才可以使用 [现在已经废弃]
A : 必须以什么开头 一般都用^ [了解]
Z : 必须以什么结尾 一般都用$ [了解]
D: 必须以什么结尾 但是结尾字符串后必须是没得东西!设置m修正符后会失效!
U : 修正正则的贪婪模式
原因: 正则表达式的特点:就是比较”贪婪“ .* .+ 所有字符都符合这个贪婪条件
修正贪婪如下方式:
- 使用模式修正符号 U
- 一种是使用?完成 .? .+?
注意: 如果两种方式同时出现又会开启了贪婪模式 例如都存在 .? /U
小提示:模式修正符不是所有语言都支持!
模式修正符案例 如下:
$pattern='/abC/i'; $string='abcABC'; $pattern='/^w.+/im'; $string='abcABCcccc world element what wrong?'; $pattern='/^w.+/ims'; $string='abcABCcccc world element what wrong?'; $pattern='/this is php/ix'; $string='thisisphp'; $pattern='/this\s?is\s?php/i'; $string='this is php'; $pattern='/this is/AD'; $string='this is php'; $pattern='/^t.*/U'; $string='this is php'; $pattern='/^t.*?/U'; $string='this is php'; preg_match($pattern, $string,$arr); show($arr);
接下来 让我们来做一些非常简单的正则小练习题吧!
练习1: 匹配用户名必须是英文+数字 最长不超过8位, 最小5位 如下:
$string='wang12345'; $pattern='/^[a-zA-Z0-9]{1}[a-zA-Z0-9]{4,7}/'; preg_match($pattern, $string,$arr); show($arr);
练习2:匹配Email 如下:
$string='1562hejun466@qq.com'; //$string='mousesportsjonas@163.com'; //$string='mouses.ports.jonas@163.com'; //$string='mousical@public.net'; //$string='mousical@public'; $pattern='/^(?:\w+\.)?(?:\w+\.)?\w+@[a-zA-Z0-9]+(?:\.(?:net|org|com))?$/'; preg_match($pattern, $string,$arr); show($arr);
练习3:匹配一个HTTP URL的正则表达式 如下:
/* * 匹配URL 例如: * http://www.baidu.com * http://baidu.com * baidu.com * zhidao.baidu.com 等等 */ $string='http://www.baidu.com'; $string='https://baidu.com'; $string='https://www.baidu.com'; $string='baidu.com'; $string='zhidao.baidu.com'; $string='http://zhidao.baidu.com'; $pattern='/^(?:http[s]?:\/\/(?:www\.)?)?(?:[a-zA-Z0-9]+\.)?[a-zA-Z0-9]+\.(?:com|net|org)$/'; preg_match($pattern, $string,$arr); show($arr);
练习4:匹配手机号码与座机电话号码正则表达式 如下:
$string='63839154'; $string='023-63505008'; $string='18723188548'; $string='0371-60333332'; $pattern='/^1[35678]{1}\d{9}|0[0-9]{2,3}\-\d{7,8}|\d{7,8}/'; preg_match($pattern, $string,$arr); show($arr);
练习5 :匹配时光网的首页中的所有图片爬取出来 如下:
$string=file_get_contents('http://www.mtime.com/'); $pattern='/<img\ssrc=\".*?\"\/>/'; preg_match_all($pattern, $string,$arrList); $patternReplace='/(?<=data-src=\").+?(?=\")/'; foreach ($arrList[0] as $k=>$v){ preg_match($patternReplace, $v,$arr); if(!empty($arr[0])){ $url[]=$arr[0]; $patternList[]='/(?<=src=\").+?(?=\")/'; echo preg_replace($patternList,$url,$arrList[0][$k]).'<br>'; } }
练习6:匹配将某个列表页面中的标题名称全部取出来循环成表格
//练习6:匹配将某个列表页面中的标题名称全部取出来循环成表格 $string=file_get_contents('http://www.cqepc.cn/'); $pattern='/\<div class=\"left\">.+?\<\/div\>/s'; preg_match_all($pattern, $string,$arr); echo '<h2 style="text-align:center;">重庆航天职大招生就业信息</h2>'; echo '<table border="1" cellpadding="0" cellspacing="0" width="700px" style="border-collapse:collapse; margin:20px auto;">'; foreach ($arr[0] as $k=>$v){ echo '<tr>'; echo '<td style="padding:5px;">'.$v.'</td>'; echo '</tr>'; } echo '</table>';
"点赞" "评论" "收藏"
这篇关于3.正则表达式中 什么是模式修正符、知道什么是贪婪匹配!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-0939. 干货系列从零用Rust编写负载均衡及代理,正则及格式替换
- 2024-01-08如何编写高效的正则表达式?
- 2023-12-29"Matlab中的正则表达式:强大而灵活的工具"
- 2023-09-30这个正则 为啥同样的单号第二个就提取不出来?
- 2023-06-086.2 re 正则表达式
- 2023-06-06将字符串里的\x01,\x02这些替换掉用正则表达式无效?
- 2023-05-24正则表达式详解
- 2023-05-17我让gpt写了一段正则表达式代码,可是运行报错,可以帮忙看看哪里出了问题?
- 2023-04-27我要提取text4文本中的邮箱号 正则应该怎么写?
- 2023-04-15bash shell 无法使用 perl 正则