正则 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
quzeyao
V2EX    问与答

正则

  •  < href="Javascript:" Onclick="downVoteTopic(49957);" class="vote">
  •   quzeyao 2012-10-14 17:01:56 +08:00 4321 次点击
    这是一个创建于 4744 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大神们求助啊...问一下
    .*href="(.*?)">(.*)</a.*
    能不能匹配这一行
    <ul><li><span><font class="hui">已浏览:1612</font></span><a rel="nofollow" target="_blank" href="http://today.hitwh.edu.cn/news_show.asp?id=10887">2012-2013 学年秋 季学期公共课考试时间安排 </a><font color="#3a6399">  2012-10-09</font></ul>
    21 条回复    1970-01-01 08:00:00 +08:00
    quzeyao
        2
    quzeyao  
    OP
       2012-10-14 17:36:38 +08:00
    @crazybubble tks 我试试
    quzeyao
        3
    quzeyao  
    OP
       2012-10-14 17:45:00 +08:00
    @crazybubble 没弄明白..。大神 我想匹配那行html之后把地址提取出来替换掉那行 该怎么写
    Mutoo
        4
    Mutoo  
       2012-10-14 17:51:33 +08:00   1
    第一个 .* 就会匹配所有的字符,这里应该使用“懒惰模式” .*?

    .*?href="(.*?)">(.*?)</a.*

    匹配结果的$1和$2分别是<a>的 href 和 innerHTML
    quzeyao
        5
    quzeyao  
    OP
       2012-10-14 18:02:26 +08:00
    @Mutoo 还不行 我寻思写个校网新闻的客户端 直接在yahoo pipe里写好正则 在客户端rss就行了 可是 怎么也不认啊
    quzeyao
        6
    quzeyao  
    OP
       2012-10-14 18:05:05 +08:00
    crazybubble
        7
    crazybubble  
       2012-10-14 18:07:39 +08:00   1
    Mutoo
        8
    Mutoo  
       2012-10-14 18:09:07 +08:00   1
    @quzeyao 你先理解一下“懒惰模式”吧。

    上面那个正则只考虑对一行文字做匹配,你可以尝试把最后一个.*去掉,不然会吞掉后面所有的东西。
    quzeyao
        9
    quzeyao  
    OP
       2012-10-14 18:12:43 +08:00
    crazybubble
        10
    crazybubble  
       2012-10-14 18:15:46 +08:00   1
    @quzeyao 要匹配这个link,光用那个pattern不够,因为你是要匹配href=之后,</a之前的这个pattern(事实上,不是</a,因为</a之前还有那段中文的描述),那你需要的是两个零宽断言,也就是类似 如果在一个pattern前方找到了xxx,这个pattern后面找到了yyy,那么这串pattern是我想要的。
    quzeyao
        11
    quzeyao  
    OP
       2012-10-14 18:16:20 +08:00
    @Mutoo 恩 会看得 不过。。。 还不行
    crazybubble
        12
    crazybubble  
       2012-10-14 18:17:46 +08:00
    @quzeyao 你可以试试 (?<=<\s*a\s+[^>]*href\s*=\s*["|'])[^"<>]+(?=["|'])
    看是不是你想要的
    quzeyao
        1
    quzeyao  
    OP
       2012-10-14 18:17:53 +08:00
    @crazybubble 你是说我原来正则括号里的部分吧
    crazybubble
        14
    crazybubble  
       2012-10-14 18:24:59 +08:00
    @quzeyao 不是不是 我说的是比如像这样
    (<?<=你想要匹配的pattern之前会遇到的pattern)你要匹配的pattern(?=你要匹配的pattern的之后会遇到的pattern)
    linuz
        15
    linuz  
       2012-10-14 18:29:41 +08:00   1
    crazybubble
        16
    crazybubble  
       2012-10-14 18:35:42 +08:00
    @linuz 这个测试器貌似检测不出(?<=< 中第二个<
    所以后来我找到了http://www.zhongguosou.com/computer_question_tools/test_regex.aspx 虽然看上去丑而且慢,但是还是挺管用的
    quzeyao
        17
    quzeyao  
    OP
       2012-10-14 18:36:22 +08:00
    @linuz 感谢工具


    @crazybubble

    @Mutoo
    是yahoo pipes 正则的问题
    caomu
        18
    caomu  
       2012-10-14 19:37:34 +08:00   1
    跪了。。。对着我以前做的pipes怎么改都提取不出来。。。 http://pipes.yahoo.com/pipes/pipe.info?_id=a209cc1bf63d3aabc0084eb89890be2c 都差不多都是提取标题和链接。。。pipes的正则很奇葩的,我就老是遇上各种奇葩的结果。。。

    考虑到 fetch page 是准备废弃的模块,于是我还是用 Xpath fetch page 做了一个,LZ看看吧。(觉得还行就点一下“感谢回复者”吧~)

    http://pipes.yahoo.com/pipes/pipe.info?_id=fccad9f03362cf30740ea619cd3f0d66
    linuz
        19
    linuz  
       2012-10-14 19:40:44 +08:00
    quzeyao
        20
    quzeyao  
    OP
       2012-10-14 19:45:24 +08:00
    @caomu 完美 我差一点就要在vps上直接搞了
    xavierskip
        21
    xavierskip  
       2012-10-15 10:15:26 +08:00
    http://regexpal.com/ 可以用这个方便调试
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     906 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:49 PVG 04:49 LAX 13:49 JFK 16:49
    Do have faith in what you're doing.
    ubao 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