正则表达式中的【模式修正符】 完美增强字符串处理的能力!

简介: 如果你还没有搞懂模式修饰符是什么?那么你必须要看一下这篇文章!!

🚀 个人主页 极客小俊
✍🏻 作者简介:web开发者、设计师、技术分享博主
🐋 希望大家多多支持一下, 我们一起进步!😄
🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注

logo.png

我们接着上一节的内容继续说正则..

模式修正符 或者叫 模式单元

语法: /原子+元字符+量词/模式修正符号 或者说 /正则表达式/模式修正符
在php中模式修正符也叫修饰符,包含:i、m、s、U、e 模式修正符必须配合正则函数一起使用才有意义
例如:

"/\<img\s*src=\".*?\"\/\>/iU"
  1. 模式修正符就是几个字母
  2. 可以一次使用一个,每一个具一定的意义, 也可以连续使用多个
  3. 是对整个正则表达式调优使用, 也可以说是对正则表达式功能的扩展

例如:
"/abc/" 只能匹配小写字母 abc
"/abc/i" 可以不区分大小写匹配 ABC abc Abc ABc AbC

模式修正符在php手册中查找如下位置:

1.png

常用模式修正符如下:
i : 表示在和模式进行匹配进不区分大小写、执行对大小写不敏感的匹配

m : 将字符串视为多行 视为多行后,任何一行都可以以什么开始或以什么结束 ^ 和 $

s : 将字符串视为单行、 如果没有使用这个模式修正符号时, 元字符中的"."默认不能匹配换行符号, 也就是说如果把一个字符串视为单行、那么这个换行符也就是一个普通符号了,不代表换行的意思了 ,所以 . 也就可以匹配上换行符了! [这里字符串是双引号哦]

x : 表示模式中的空白忽略不计,再说一次是正则模式中的空白 不是字符串中的!

e : 正则表达式必须使用在preg_replace替换字符串的函数中时才可以使用 [现在已经废弃]

A : 必须以什么开头 一般都用^ [了解]

Z : 必须以什么结尾 一般都用$ [了解]

D: 必须以什么结尾 但是结尾字符串后必须是没得东西!设置m修正符后会失效!

U : 修正正则的贪婪模式

原因: 正则表达式的特点:就是比较”贪婪“ .* .+ 所有字符都符合这个贪婪条件

修正贪婪如下方式:

  1. 使用模式修正符号 U
  2. 一种是使用?完成 .? .+?
    注意: 如果两种方式同时出现又会开启了贪婪模式 例如都存在 .
    ? /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({
   
   mathJaxContainer[0]}string,$arr);
show($arr);
接下来 让我们来做一些非常简单的正则小练习题吧!

练习1: 匹配用户名必须是英文+数字 最长不超过8位, 最小5位 如下:

$string='wang12345';
$pattern='/^[a-zA-Z0-9]{1}[a-zA-Z0-9]{4,7}/';

preg_match({
   
   mathJaxContainer[1]}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';

{
   
   mathJaxContainer[2]}/';

preg_match({
   
   mathJaxContainer[3]}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';
{
   
   mathJaxContainer[4]}/';

preg_match({
   
   mathJaxContainer[5]}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({
   
   mathJaxContainer[6]}string,$arr);
show($arr);

练习5 :匹配时光网的首页中的所有图片爬取出来 如下:

$string=file_get_contents('http://www.mtime.com/');
$pattern='/<img\ssrc=\".*?\"\/>/';
preg_match_all({
   
   mathJaxContainer[7]}string,$arrList);

$patternReplace='/(?<=data-src=\").+?(?=\")/';
foreach ({
   
   mathJaxContainer[8]}k=>$v){
   
   
    preg_match({
   
   mathJaxContainer[9]}v,$arr);
    if(!empty($arr[0])){
   
   
        {
   
   mathJaxContainer[10]}arr[0];
        $patternList[]='/(?<=src=\").+?(?=\")/';
        echo preg_replace({
   
   mathJaxContainer[11]}url,{
   
   mathJaxContainer[12]}k]).'<br>';
    }
}

练习6:匹配将某个列表页面中的标题名称全部取出来循环成表格

//练习6:匹配将某个列表页面中的标题名称全部取出来循环成表格

$string=file_get_contents('http://www.cqepc.cn/');

$pattern='/\<div class=\"left\">.+?\<\/div\>/s';

preg_match_all({
   
   mathJaxContainer[13]}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 ({
   
   mathJaxContainer[14]}k=>$v){
   
   
   echo '<tr>';
   echo '<td style="padding:5px;">'.$v.'</td>';
   echo '</tr>';
}
echo '</table>';
相关文章
|
3月前
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
52 0
|
PHP 开发者
你见过这些正则表达式中奇奇怪怪的匹配模式吗 _ 贪婪匹配、懒惰匹配 、禁止贪婪匹配!
一篇文章让你清楚的了解正则表达式中奇奇怪怪的匹配模式-- 贪婪匹配、懒惰匹配 、禁止贪婪匹配!
82 1
你见过这些正则表达式中奇奇怪怪的匹配模式吗 _ 贪婪匹配、懒惰匹配 、禁止贪婪匹配!
|
6月前
|
JavaScript 前端开发 索引
JavaScript中的正则表达式:使用与模式匹配
【4月更文挑战第22天】本文介绍了JavaScript中的正则表达式及其模式匹配,包括字面量和构造函数定义方式,以及`test()`、`match()`、`search()`和`replace()`等匹配方法。正则表达式由元字符(如`.`、`*`、`[]`)和标志(如`g`、`i`)组成,用于定义搜索模式。文中还分享了正则使用的技巧,如模式分解、非捕获分组和注释。掌握正则表达式能提升文本处理的效率和代码质量。
|
开发者
正则表达式中子模式如何取别名 注释又怎么写
正则表达式的注释居然有如此玄机!
46 0
正则表达式中子模式如何取别名 注释又怎么写
|
6月前
|
数据可视化 容器
解锁正则表达式的秘密:regex-vis工具带你看见模式匹配的魔法!
解锁正则表达式的秘密:regex-vis工具带你看见模式匹配的魔法!
138 2
|
6月前
|
机器学习/深度学习 数据采集 XML
正则表达式:字符串处理的瑞士军刀
正则表达式:字符串处理的瑞士军刀
正则表达式:字符串处理的瑞士军刀
|
6月前
|
存储 Shell 程序员
Python 自动化指南(繁琐工作自动化)第二版:七、使用正则表达式的模式匹配
Python 自动化指南(繁琐工作自动化)第二版:七、使用正则表达式的模式匹配
95 0
|
开发者 Perl
正则表达式中的模式修正符S和M 妙用!
教你如何正确使用正则表达式中的模式修正符S和M!
66 0
正则表达式中的模式修正符S和M 妙用!
|
5月前
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
54 2
|
5月前
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。