2013-03-19 60 views
1

所以,正则表达式一直是我存在的一段时间的祸根。我觉得我正在理解它的风口浪尖,但我感到非常沮丧。总之:我在RegEx表达式中缺少什么?

我试图通过PHP刮从以下网站数据:

http://magicseaweed.com/Asbury-Park-Surf-Report/857/

我想提取页面顶部的大胆波高(目前,它读3-5)。我明白为什么这个工程:

preg_match('/<div class="msw-fct-ccd msw-sr-details span3"> <h3> <span>(.*)  
<small>ft<\/small> <\/span> <div class="msw-fct-ccr msw-sr-rating">/', $pageMagic, 
$height); 

但我不明白为什么这会不会:

preg_match('/<div class="msw-fct-ccd msw-sr-details span3"> <h3> <span>(/d-/d)|(/d)  
<small>ft<\/small> <\/span> <div class="msw-fct-ccr msw-sr-rating">/', $pageMagic, 
$height); 

在我的脑海里,按理来说,应该寻找一个数字,一个破折号,随后另一个数字或只是一个数字。我在http://gskinner.com/RegExr/中测试了正则表达式,它拿起了3-5。先谢谢你!

+1

**不要使用正则表达式来解析HTML **。你不能用正则表达式可靠地解析HTML,你将面临悲伤和挫折。只要HTML从你的期望改变,你的代码就会被破坏。有关如何使用已经编写,测试和调试的PHP模块正确解析HTML的示例,请参阅http://htmlparsing.com/php。 – 2013-03-19 22:20:23

回答

2

你的斜线是错误的。它应该是:

(\d-\d)|(\d) 

顺便说一句,您可以简化这:

\d(-\d)? 

...但注意,这将改变捕获组。我留下的修补程序作为你的练习:)