正则求助,如何匹配每个 HTML 标签? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
andybest
V2EX    问与答

正则求助,如何匹配每个 HTML 标签?

  •  
  •   andybest 2014-12-04 02:53:46 +08:00 2694 次点击
    这是一个创建于 3971 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <script>不可预知的代码aaa不可预知的代码</script>
    <script>不可预知的代码bbb不可预知的代码</script>

    需要仅匹配包含 bbb 关键字的 script 标签,使用:

    <script>.+?bbb.+?</script>

    发现总是匹配了所有内容,如何破?
    16 条回复    2014-12-04 21:21:44 +08:00
    yfdyh000
        1
    yfdyh000  
       2014-12-04 03:18:11 +08:00
    (<script>).+?bbb.+?(</script>)
    这样吗。
    andybest
        2
    andybest  
    OP
       2014-12-04 03:37:53 +08:00
    @yfdyh000 这样是从头开始匹配到尾了
    yfdyh000
        3
    yfdyh000  
       2014-12-04 03:46:33 +08:00
    不清楚你想要哪部分。正则表达式 后向引用 分组
    http://deerchao.net/tutorials/regex/regex.htm#backreference
    Sylv
        4
    Sylv  
       2014-12-04 03:48:45 +08:00 via iPhone   1
    (<script>)[^<]+?bbb[^<]+?(</script>)
    andybest
        5
    andybest  
    OP
       2014-12-04 04:03:34 +08:00
    @Sylv 谢谢!但是还有个问题,如果内容为:

    <script>不可预知的代码aaa不可预知的代码</script>
    <script>var k='<';不可预知的代码bbb不可预知的代码</script>

    这个匹配规则就失效了,我尝试将匹配规则改为:

    (<script>)[^</script>]+?bbb[^</script>]+?(</script>)

    但不生效 ^ 只能排除单一字符码?
    andybest
        6
    andybest  
    OP
       2014-12-04 04:06:25 +08:00
    @yfdyh000 我需要匹配

    <script>不可预知的码bbb不可预知的代码</script>

    这部分内容,如果是反向引用内容为:

    <script>不可预知的代码aaa不可预知的代码</script>
    <script>不可预知的代码bbb不可预知的代码</script>
    <script>不可预知的代码ccc不可预知的代码</script>

    会失效
    11
        7
    11  
       2014-12-04 04:21:01 +08:00   1
    (<script>)(?!</script>).+?bbb.+?(</script>)
    andybest
        8
    andybest  
    OP
       2014-12-04 04:30:07 +08:00
    @11 谢谢!但实际应用中标签内容中包含换行:

    <script>不可预知的代码aaa不可预知的代码</script>
    <script>var k='<';
    不可预知的代码bbb不可预知的代码</script>

    这样匹配就失效了,我尝试改为

    (<script>)(?!</script>)[\s\S]+?bbb.+?(</script>)

    用 [\s\S] 替换 . 来包含其中的换行,但不生效,如何破?
    Sylv
        9
    Sylv  
       2014-12-04 04:55:24 +08:00   1
    <script>((?!</script>).)+bbb((?!</script>).)+</script>
    如果是包含换行的情况,其它语言不清楚,Python 的正则表达中需要加 re.DOTALL 和 re.MULTILINE 的 flags
    11
        10
    11  
       2014-12-04 04:58:54 +08:00   1
    @andybest 同 @Sylv ,你需要 multiline
    vivid
        11
    vivid  
       2014-12-04 07:15:02 +08:00
    s=find('<script>')
    e=find('</script>')
    content[s,e].find('bbb')

    over
    rrfeng
        12
    rrfeng  
       2014-12-04 10:29:19 +08:00
    遇到这种问题我都会建议使用 DOM 解析 模块……
    imn1
        13
    imn  
       2014-12-04 10:46:14 +08:00
    以你说的感觉很奇芭,1.默认非贪婪?2.圆点默认支持换行?
    sohoer
        14
    sohoer  
       2014-12-04 11:35:09 +08:00
    楼主是用JAVA的吧!
    JAVA对正则支持不太好,做嵌套匹配得想点办法
    sohoer
        15
    sohoer  
       2014-12-04 11:46:01 +08:00
    script不考虑嵌套可以试下这个

    .*<script>(.*?bbb.*?)</script>.*
    abscon
        16
    abscon  
       2014-12-04 21:21:44 +08:00
    搭车问能回答出楼主这个问题的高手另一个问题:
    我写的程序有时候会有bug,一运行就进死循环,界面没有响应,还得费劲杀死进程。为了避免浪费时间,我想安装一个“死循环卫士”,在程序运行前自动检测这个程序,如果发现会进死循环就阻止它运行,并弹出一个对话框提示:死循环卫士检测到该程序会进入死循环,需要继续运行吗?

    那么现在问题就来了:“死循环卫士”哪里可以下载到?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2490 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 11:09 PVG 19:09 LAX 04:09 JFK 07:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86