PHP正则表达式

PHP正则表达式

  一、函数:

    1、preg_match(匹配一次)

    

    2、preg_match_all(匹配多次,全局匹配)

    

    3、preg_replace

    

    4、preg_split

    

  二、PHP正则语法

    1、限定符:可以是//,也可以##

    2、元字符

      1)、使用一个字符本身,来代表一个字符

      2)、使用一个转义字符表示一个字符

        

      3)、表示一个集合中某一个字符

        [begin-end],如[a-zA-Z]:表示所有字母

        [^abc]:除abc外其他的字符

      4)、点.:表示出换行之外的任意一个字符

        |或者,如:$reg = '/red|blue|green/';

      5)、中文范围:[x{4e00}-x{9fa5}] 限定符后面加u,表示以utf-8形式匹配

    3、量词:用在元字符后面,用来约束筛选的字符数量

      1)、{m,n}:最少m个,最多n个

      2)、{m}:固定m个

      3)、特殊的量词:

        *:表示任意一个数量,可能是0个,也可能是多个

        +:表示至少有一个

        ?:表示可能0个,可能1个

        ****** 注:?放在量词的后面,表示采用懒惰模式匹配,PHP默认贪婪模式

    4、其他

        ^表示被匹配字符串必须以后面的字符开头,

        $表示被匹配的字符串必须以$前面的字符结束

        如:'/^red[w]*[d]$/':以red开头,以数字结尾

    5、模式修正符:

      i:忽略大小写

      s:万能点模式,  .  能匹配任意字符

      u:强制使用utf-8解析中文

      U:全局懒惰模式,匹配一个字符

  三、分组

    1、使用小括号将匹配的结果分组,筛选出我们需要的内容

      preg_metch()匹配后,将结果保存在数组中

      索引为0,为整个规则匹配的结果

      索引为1,为第一个分组

      索引为2,为第二个分组

      。。。

    2、反向引用分组:

      在$reg规则里引用分组,使用 ,1表示引用第一个分组;2表示引用第二个分组

    3、非捕获子组:

      如果不想筛选分组的结果,可以在分组()里使用?:,表示非捕获

      $reg = '/<img.*src=(?:.*).*"/';

  代码:

    

    

  

  四、预查

    1、正向预查:匹配时,从左到右匹配到需要预查的地方,先看看是什么内容

      (?=预查的内容)

      示例代码:

      

      执行结果

      

      由于采用懒惰模式,所以只匹配了helloC;   

    2、非正向预查

      预先从左到右查看一下,后面不是某个字符(?!)

      

      

    3、逆向预查  

      从右向左先预查(?<=)

      

      

    4、非逆向预查(?<!)

      

      

    练习:

      1、将TopicQuestionModel修改为topic_question_model

      

  

原文地址:https://www.cnblogs.com/helloJiu/p/6171146.html