V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xdeng
V2EX  ›  PHP

求这个正则表达式怎么写?

  •  
  •   xdeng · 2013-04-24 08:56:07 +08:00 · 3033 次点击
    这是一个创建于 3991 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想获取 某影院的放映信息 通过网页抓取,通过正则表达式该怎么写

    <a href="javascript:getFilmByShow('27173782','','01','1号厅','2125','45','0','F25220','特种部队:全面反击(3D)','2013-04-24','270137','sp002','44090301','xxx影剧院','','');" class="en2d_n">21:25 | <b>¥45</b></a>

    网页里的某一段。我是新手。

    我买了本《精通正则表达式》的书发现非常的坑。乱序无章。不适合初学者,各位有什么好书或者文章介绍
    13 条回复    1970-01-01 08:00:00 +08:00
    dallaslu
        1
    dallaslu  
       2013-04-24 09:24:13 +08:00   ❤️ 1
    搜索:正则表达式 半小时
    rrfeng
        2
    rrfeng  
       2013-04-24 09:37:12 +08:00
    正则表达式没有确定的写法
    只有确定的要求,还要确定的语言(比如perl python正则完全不一样)

    so,此问题无法回答。
    rrfeng
        3
    rrfeng  
       2013-04-24 09:37:56 +08:00
    啊,没注意是在 PHP 版……
    xdeng
        4
    xdeng  
    OP
       2013-04-24 09:45:59 +08:00
    @rrfeng -.-
    lcxz
        5
    lcxz  
       2013-04-24 09:50:41 +08:00   ❤️ 1
    /\<a[^<]*?class=\"en2d_n\">[\s\S]*?\<\/a\>/ig JS
    其它语言自己变通下
    mrbrooks
        6
    mrbrooks  
       2013-04-24 10:52:42 +08:00
    @lcxz 哈哈,[\s\S]*? 这个写法,我昨晚谷歌搜索到了,一开始还真不知道咋写。
    yakczh
        7
    yakczh  
       2013-04-24 11:02:23 +08:00
    preg_match_all("/<a.*?><\/a>/m",$text,$out);
    h2ero
        8
    h2ero  
       2013-04-24 11:21:16 +08:00   ❤️ 1
    《精通正则表达式》这本书确实不好懂,建议先看下《正则指引》比较好,这本书的作者是上一本书的作者。可以入手下后一本再看看。
    <?php
    $str = <<<EOF
    <a href="javascript:getFilmByShow('27173782','','01','1号厅','2125','45','0','F25220','特种部队:全面反击(3D)','2013-04-24','270137','sp002','44090301','xxx影剧院','','');" class="en2d_n">21:25 | <b>¥45</b></a>
    EOF;
    echo $str;
    $pattern = "/<a(?:.*?)getFilmByShow\((?P<infos>.*?)\)(?:.*?)>(?P<time>.*?)\|\s*<b>(?P<price>.*?)<\/b>\s*<\/a>/ism";
    preg_match_all($pattern, $str, $res);
    var_dump(explode(",",$res['infos'][0]));
    var_dump($res);
    bitsmix
        9
    bitsmix  
       2013-04-24 11:25:10 +08:00
    精通正则表达式 乱序无章

    你真是好样儿的
    h2ero
        10
    h2ero  
       2013-04-24 11:30:38 +08:00
    @bitsmix 可能对于新手确实不太好懂
    -----------------------------------------
    - 这本书的作者是上一本书的作者
    + 这本书的作者是上一本书的译者
    xdeng
        11
    xdeng  
    OP
       2013-04-24 11:42:11 +08:00
    @bitsmix 这里讲一点 那里讲一点 似简非简 我都不知从哪入手 非常不适合新手。新手喜欢的是有序。
    PrideChung
        12
    PrideChung  
       2013-04-24 11:48:21 +08:00   ❤️ 1
    不要用正则表达式来解析网页,HTML的复杂程度超出了正则表达式的能力范围,很难写出滴水不漏的正则,就算你勉强写出来,过两天可能自己都看不懂了,完全无法维护。
    更多讨论可以看这篇文章 http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html

    更好的做法是用DOM parser来解释:
    javascript直接用jQuery
    PHP有Extension http://us.php.net/manual/en/book.dom.php
    Ruby有Nokogiri这个Gem http://nokogiri.org/
    Python不太熟,貌似有自带HTMLParser的库
    xdeng
        13
    xdeng  
    OP
       2013-04-24 12:26:00 +08:00
    @PrideChung 貌似你说的很不错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3030 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:52 · PVG 22:52 · LAX 07:52 · JFK 10:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.