之前我们给大家介绍了正则表达式中的定界符、原子和元字符,那么我们关于正则表达式教程的基本语法就剩下了正则表达式中的模式修正符。本节会向大家介绍模式修正符的概念、模式修正符的构成,以及结合实例的模式修正符的演示,大家在学习完本节内容之后,就完全可以读懂正则表达式了。

什么是模式修正符?

1, 模式修正符就是几个字母,我们在每个正则表达式中可以一次使用一个,也可以连续使用多个,每一个具一定的意义。

2, 模式修正符是对整个正则表达式调优使用,也可以说是对正则表达式功能的扩展。

还记得正则表达式的那个公式吗?'/原子和元字符/模式修正符',其中正斜线为边界符。

模式修正符的构成

模式修正符就是字母,只不过这些在模式修正符的应用之中有特殊的含义。下面我来看看都有哪些模式修正符,请看下表:

模式修正符 说明
i 表示在和模式进行匹配进不区分大小写
m 将模式视为多行,使用^和$表示任何一行都可以以正则表达式开始或结束
s 如果没有使用这个模式修正符号,元字符中的"."默认不能表示换行符号,将字符串视为单行
x 表示模式中的空白忽略不计
e 正则表达式必须使用在preg_replace替换字符串的函数中时才可以使用(讲这个函数时再说)
A 以模式字符串开头,相当于元字符^
Z 以模式字符串结尾,相当于元字符$
U 正则表达式的特点:就是比较“贪婪”,使用该模式修正符可以取消贪婪模式

由于i表示匹配不区分大小写,在下面的示例中,我们不再进行演示,我们来看一下其他模式修正符的示例。

1,模式修正符m。

<?php
    $pattern = '/^abc/m';
    $string = 'bcd
abc
cba';
    if (preg_match($pattern, $string, $arr)) {
        echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";
        print_r($arr);
    } else {
        echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>";
    }
?>

匹配结果是成功的。注意:我们在使用模式修正符m的时候,将匹配字符串看成是多行而不是默认的单行,所以任何一行只要是以abc开头,就匹配成功。但是,如果能匹配的行前面有空格的话,就不能匹配了!除非修改正则表达式的匹配模式。

2,模式修正符s。

<?php
    $pattern = '/a.*c/s';
    $string = 'adsadsa
        c';
    if (preg_match($pattern, $string, $arr)) {
        echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";
        print_r($arr);
    } else {
        echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>";
    }
?>

这次的匹配记过也是成功的。如果你将上例中的模式修正符s去掉的话,匹配就会失败。因为模式修正符s将匹配字符串看作是单行的,所以这个时候,元字符中的"."就可以表示换行符号了。

3,模式修正符x。

<?php
    $pattern = '/a c/x';
    $string = 'a c';
    if (preg_match($pattern, $string, $arr)) {
        echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";
        print_r($arr);
    } else {
        echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>";
    }
?>

这次的匹配结果是失败的。因为我们使用模式修正符x取消了模式中的空格。注意:我们无法使用模式修正符取消\s表示的空白。

4,模式修正符A。

<?php
    $pattern = '/ac/A';
    $string = 'acahgyghvbm';
    if (preg_match($pattern, $string, $arr)) {
        echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";

print_r($arr);
    } else {
        echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>";
    }
?>

正则表达式表示的含义是匹配以ac开头的字符串,结果成功。

模式修正符Z表示的是以字符串结尾的匹配,和A的用法是一样的,我们不再进行演示。

5,模式修正符U。

这个模式修正符是十分重要的!在正则表达式中,其本身是“贪婪”的。那什么是贪婪模式呢?贪婪模式的意思就是说,正则表达式默认会在查找到第一个匹配后,继续尝试后面的匹配,如果能找到匹配,则匹配最大的范围字符串。但有的时候这并不是我们想要的结果,所以我们需要取消贪婪模式。

我们还是先看一个贪婪模式的例子:

<?php
    $pattern = '/<b>.*<\/b>/';
    $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>';
    if (preg_match($pattern, $string, $arr)) {
        echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";
        print_r($arr);
    } else {
        echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>";
    }
?>

这个实例的本意是匹配welcome,但是结果却匹配了welcome to phpfuns整个字符串(注意我们的字符串'welcome to phpfuns',其开头和结尾正好构成了正则表达式的模式匹配,所以匹配成功),这就是正则表达式的贪婪模式。当然,这不是我们要的结果。

取消贪婪模式

我们可以使用模式修正符U和元字符?两种方式取消正则表达式的贪婪模式。

模式修正符U取消贪婪模式

<?php
    $pattern = '/<b>.*<\/b>/U';
    $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>';
    if (preg_match($pattern, $string, $arr)) {
        echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";
        print_r($arr);
    } else {
        echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>";
    }
?>

元字符?取消贪婪模式

<?php
    $pattern = '/<b>.*?<\/b>/';
    $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas';
    if (preg_match($pattern, $string, $arr)) {
        echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";
        print_r($arr);
    } else {
        echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>";
    }
?>

注意元字符的位置,我们必须在“”之前结束贪婪模式,才能达到我们的目的,匹配welcome!

本节我们介绍了正则表达式中的模式修正符,正则表达式的贪婪模式以及演示了正则表达式中模式修正符的使用方法。到此为止,基本的正则表达式语法构成我们也学习完了。在下一节,我们介绍一些常用的正则表达式,供大家查阅使用。

正则表达式教程之模式修正符相关推荐

  1. PHP正则表达式学习(一) 模式修正符

    1.i (PCRE_CASELESS) :如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配. /** *result: Array ( ) */ $str = 'AbbbEEs'; $matc ...

  2. 正则表达式模式修正符

    模式修正符 模式修正符 -- 解说正则表达式模式中使用的修正符 说明 下面列出了当前在 PCRE 中可能使用的修正符.括号中是这些修正符的内部 PCRE 名.修正符中的空格和换行被忽略,其它字符会导致 ...

  3. 正则表达式中模式修正符作用详解(i、g、m、s、x、e)

    正则表达式中常用的模式修正符有i.g.m.s.x.e等.它们之间可以组合搭配使用. 它们的作用如下: //修正符:i 不区分大小写的匹配; //如:"/abc/i"可以与abc或a ...

  4. php 正则表达式 ies,正则表达式模式修正符(/ies)

    正则表达式模式修正符(/ies) 围观1955次 更新日期:2017-06-25 00:03:34 模式修正符 模式修正符 -- 解说正则表达式模式中使用的修正符 说明 下面列出了当前在 PCRE 中 ...

  5. php正则表达式修正符,深入解析PHP正则模式修正符

    今天我们就向大家具体讲解了PHP正则模式修正符的相关概念,希望对大家有所帮助. 模式修正符:模式修正符是标记在整个模式之外的.模式修正符中有几个常用的,分别是I.m.s.U,下面我们来具体了解一下. ...

  6. php 模式修正符e,模式修正符 - PHP 5 中文文档

    i (PCRE_CASELESS) 如果设定此修正符,模式中的字符将同时匹配大小写字母. m (PCRE_MULTILINE) 默认情况下,PCRE 将目标字符串作为单一的一"行" ...

  7. 最全的正则表达式教程

    一.正则基础概述 首先给出正则最基础的知识点概述,好让同学们能回想起一些之前学过的知识点,能更好地进行阅读 这里分享一个在线练习正则的网站,同学们可以在这里进行练习 --> [ 在线练习 ] 笔 ...

  8. 58.最全正则表达式教程,最好正则表达式教程

    正则表达式是什么? 字符是计算机软件处理文字最基本的单位,可以是字母,也可以是数字,标点符号,空格,换行符,汉字等等. 字符串是0个或更多个字符的序列.文本也就是文字,字符串.说某个字符串匹配某个正则 ...

  9. 很好的正则表达式教程

    版本:v2.21 (2007-8-3) 作者:deerchao 来源:unibetter大学生社区 转载请注明来源 本文目标 如何使用本教程 正则表达式到底是什么? 入门 测试正则表达式 元字符 字符 ...

最新文章

  1. HDU-1394-Minimum Inversion Number
  2. 织梦CMS调用指定顶级栏目名称的方法
  3. 栏目图片 栏目描述_昕街拍|长期福利栏目来啦,秀街拍赢礼品!
  4. YBTOJ:斐波拉契(矩阵快速幂)
  5. js动态添加的元素,动作绑定
  6. Java 11 教程
  7. 推荐几个学霸级的技术公众号陪你过暑假
  8. Linux终端命令格式
  9. 《计算机网络》学习——第3章 数据链路层
  10. 换行符CR,LF和CRLF
  11. 事务中的多线程引发的怪异现象
  12. C++17 实现日期和时间相关编程
  13. ppt打不开,显示发现文件中的内容有问题。尝试修复此演示文稿无果!
  14. matlab simca,SIMCA软件|SIMCA-多元数据分析软件
  15. review设备管理
  16. Clipboard.js 实现点击复制
  17. maya腿的蒙皮旋转枢轴_MAYA更改、移动枢轴点
  18. iphone开发(一)
  19. 二叉树非递归遍历(模版)
  20. keystroke java_KeyStroke

热门文章

  1. useReducer使用和原理
  2. php运行时输出,在PHP中运行具有实时输出的过程
  3. android 平板横版布局,引领构建安卓平板横屏生态 华为MatePad Pro凭什么?
  4. ios开发 多人语音聊天_客户端实现(iOS)
  5. for (var key in Obj)遍历JS对象/数组
  6. vim显示行号_使用 vim 不得不看的 2 个 tips
  7. 软件部署在不同linux上,如何在Linux中安装和部署keepalived
  8. 高斯伪谱法 matlab,Gauss 高斯伪谱法求解的 ,希望对大家有用的!代码比较复杂,但是可以运行。 matlab 263万源代码下载- www.pudn.com...
  9. 20190822:(leetcode习题)字符串转换整数 (atoi)
  10. 自定义JS错误 : Cannot read property 'getCellValue' of undefined