• PHP正则表达式-修饰符


      我们在PHP正则表达式的学习中会碰到修饰符,那么关于PHP正则表达式修饰符的理解以及使用我们需要注意什么呢?那么我们来具体的看看它的概念以及相关内容。在学习PHP正则表达式修饰符之前先来理解下贪婪模式,前面在元字符中提到过"?"还有一个重要的作用,即"贪婪模式",什么是"贪婪模式"呢?

    PHP正则表达式贪婪模式:

      比如我们要匹配以字母"a"开头字母"b"结尾的字符串,但是需要匹配的字符串在"a"后面含有很多个"b",比如"a bbbbbbbbbbbbbbbbb",那正则表达式是会匹配第一个"b"还是最后一个"b"呢?如果你使用了贪婪模式,那么会匹配到最后一个"b",反之只是匹配到第一个"b"。

    PHP正则表达式贪婪模式使用实例:

    /a.+?b/
    /a.+b/U

    对比不使用贪婪模式的实例如下:

    /a.+b/

    PHP正则表达式修饰符的种类及介绍:

    i :忽略大小写,设置i选项后,模式中的字母会进行大小写不敏感匹配,即"a"和"A" 是一样的。

    m:多行匹配模式,m选项会更改^和$元字符的默认行为,分别与行的开头和结尾匹配,而不是与输入的字符串的开头和结尾匹配

    s:单行模式,如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!

    x:如果加上该修饰符,正则表达式中的“空白字符”和“换行符”将会被忽略,除非它已经被转义,同时#号(#)被解释为注释的开头

    U:和问号的作用差不多,用于设置"贪婪模式"。

    示例代码

    <?php
    
    //非贪婪模式
    $s = "abbb";
    preg_match_all("/a.*b/",$s,$m);
    var_dump($m); //abbb
    
    //贪婪模式
    //作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性
    $s = "abbb";
    preg_match_all("/a.*?b/",$s,$m);
    var_dump($m); //ab
    
    $s = "abbb";
    preg_match_all("/a.*b/U",$s,$m);
    var_dump($m); //ab
    
    //单行模式
    $s = "Single line description";
    preg_match_all("/^S/s",$s,$m);
    var_dump($m); //S
    
    //多行模式
    $s = "First line
    Second line";
    preg_match_all("/^S/m",$s,$m);
    var_dump($m); //S
    
    $s = "First line
    Second line";
    preg_match_all("/^S/m",$s,$m);
    var_dump($m); //S
    
    //忽略正则表达式中的“非转义的空白字符”和“回车换号符”
    $p = "abc #category code
    123 #item number";
    $s = "abc123";
    preg_match_all("/".$p."/x",$s,$m);
    var_dump($m); //abc123,相当于匹配abc123

    参考资料

    http://www.360doc.com/content/10/0921/10/930254_55292179.shtml

  • 相关阅读:
    牛客 公式字符串求值
    牛客 括号字符串的有效性和最长有效长度
    POJ-2533 Longest Ordered Subsequence ( DP )
    HDU-1160 FatMouse's Speed ( DP )
    HDU-1260 Tickets ( DP )
    HDU-1074 Doing Homework( 状压DP )
    HDU-1069 Monkey and Banana ( DP )
    HDU-1087 Super Jumping! Jumping! Jumping!( DP )
    HDU-3746 Cyclic Nacklace ( kmp )
    HDU-2087 剪花布条 ( kmp )
  • 原文地址:https://www.cnblogs.com/phpfans/p/4851750.html
Copyright © 2020-2023  润新知