zoukankan      html  css  js  c++  java
  • php排除型正则表达式—— 一般排除法 及 断言(前后瞻断言)排除法

    	
    php排除型正则表达式—— 一般排除法 及 断言(前后瞻断言)的方式排除
    (被查找的内容都是多行跨行的情况)
     
    关于断言请翻阅
    php手册 · 在索引输入: preg_xxx · 进入某函数后 · 点击顶部导航的  PCRE正则语法  · 子组/断言 
    阅读更多内容.
     
           (下面所有例子中的#...# , ##仅仅表示使用正则时的一对闭合的分隔符 定界符号,ending delimiter .)
     
     
    1. 使用一般排除的方法
    要求查找到所有的html注释标签<!-- ... -->  ,
    但排除script脚本和style样式内的注释符<!-- ......  //-->
    的正则表达式
     
    代码如下:
    <?php
        $str = '...'; // 请自行输入带html注释的字符串进行测试.
     
        $patten_comm = '#<!--[^(?://\-\->)]*?-->#'; // 已排除js或style脚本样式标签内的注释,测试符合要求(也符合换行的情况)
     
        preg_match_all( $patten_comm , $str , $res );
        echo '<pre>';var_dump( $res );echo '</pre>';
    ?>
     
     
     
    该正则其中的 (?:) 表示对内容进行分组(表示作为一个整体, 或称为模组) ,但不要捕获它们。它跟小括号()的区别是,不能像
    小括号()那样通过在表达式中写上 \1  的方式, 引用括号里面的内容.  就是说只匹配,不捕获.   现在我们使用[^(?://-->)] 就表示排除 //-->  , 但由于"-"杠号在中括号内有歧义,所以要用\转义,于是改成: //\-\->   这样整个正则表达式就排除了<!-- ...  //-->, 而获取到了正确的结果。       2. 使用前瞻断言 排除 “前瞻断言”以符号(?!abc)进行声明, 其中在括号里面写上 (?!这里写上被排除的正则表达式) 的方式进行排除.   举例1: 排除以xxx为前缀的情况.     php手册上举例的是 (?!abc)ddd 排除前面是abc的情况,我们用实际应用举例:   要求: 查找字符串中的php变量$abc,但排除前面是转义符的情况—— \$abc 对应正则:  #(?!\\)\$[a-zA-Z_][a-zA-Z0-9_\-]#     举例2: 排除以xxx为结尾(后缀)的情况.    在日志文件中,一般每行作为一条记录,我们要列出所有的  以行为单位的日志,但不要包括那些机器人的情况,即排除以robots结尾的情况。(此例子系引用他人)   对应正则:  ^(?!.*?robots).*$ 该正则通过排除整个 .*robots 的方式,以达到排除以robots结尾的情况,而同时又能捕获那些不是robots结尾的文本。       3. 使用 后瞻断言 排除   后瞻断言是以  (?>! 排除内容)   为声明表示. php手册上的例子是:    (?<!foo)bar         用于查找任何前面不是”foo”的”bar”.   后瞻断言的内容,被严格限制为只能使用固定长度的字符串. 也就是不能是 (?<!end.*)  这种任意长度的, 必须是固定的, 否则php会报这个错误:Compilation failed: lookbehind assertion is not fixed length  。   后瞻断言本人使用不多,就不详述了。 


    例子:
    要求:匹配除了  <a>标签之内的,所有"test"字符 
       aaaaatestaaa<a href="test" class="aaaaa" title="oooo">aatestaaaaaa</a>aaaatestaaaa


    正则表达式:(?<!<[^>]*)test(?![^<]*</a>)
    结果:( C#测试 )
    
    
    
  • 相关阅读:
    python manage.py runserver 0.0.0.0:8000 zkz的专栏 博客频道 CSDN.NET
    分享:Intel 发布 Android 模拟器的 x86 系统映像
    分享:TreeFrog 1.1 发布,C++ Web 应用开发框架
    update R on ubuntu
    分享:FastFlow 2.0 发布,多核编程框架
    分享:centos daemon make and install
    LINQ TO SQL三层架构~更新操作
    泛型中的协变
    MVC中的统一验证机制~续
    LINQ TO SQL三层架构~添加操作
  • 原文地址:https://www.cnblogs.com/wangqishu/p/3078239.html
Copyright © 2011-2022 走看看