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

正则

  •  
  •   quzeyao · 2012-10-14 17:01:56 +08:00 · 3796 次点击
    这是一个创建于 4213 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大神们求助啊...问一下
    .*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
        13
    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   ·   我们的愿景   ·   实用小工具   ·   3486 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:42 · PVG 12:42 · LAX 21:42 · JFK 00:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.