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

2013-04-24 08:56:07 +08:00
 xdeng
我想获取 某影院的放映信息 通过网页抓取,通过正则表达式该怎么写

<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>

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

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

so,此问题无法回答。
rrfeng
2013-04-24 09:37:56 +08:00
啊,没注意是在 PHP 版……
xdeng
2013-04-24 09:45:59 +08:00
@rrfeng -.-
lcxz
2013-04-24 09:50:41 +08:00
/\<a[^<]*?class=\"en2d_n\">[\s\S]*?\<\/a\>/ig JS
其它语言自己变通下
mrbrooks
2013-04-24 10:52:42 +08:00
@lcxz 哈哈,[\s\S]*? 这个写法,我昨晚谷歌搜索到了,一开始还真不知道咋写。
yakczh
2013-04-24 11:02:23 +08:00
preg_match_all("/<a.*?><\/a>/m",$text,$out);
h2ero
2013-04-24 11:21:16 +08:00
《精通正则表达式》这本书确实不好懂,建议先看下《正则指引》比较好,这本书的作者是上一本书的作者。可以入手下后一本再看看。
<?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
2013-04-24 11:25:10 +08:00
精通正则表达式 乱序无章

你真是好样儿的
h2ero
2013-04-24 11:30:38 +08:00
@bitsmix 可能对于新手确实不太好懂
-----------------------------------------
- 这本书的作者是上一本书的作者
+ 这本书的作者是上一本书的译者
xdeng
2013-04-24 11:42:11 +08:00
@bitsmix 这里讲一点 那里讲一点 似简非简 我都不知从哪入手 非常不适合新手。新手喜欢的是有序。
PrideChung
2013-04-24 11:48:21 +08:00
不要用正则表达式来解析网页,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
2013-04-24 12:26:00 +08:00
@PrideChung 貌似你说的很不错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/66787

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX