【发布时间】:2012-02-02 23:32:58
【问题描述】:
为什么下面的计算结果为true?
if(preg_match_all('%<tr.*?>.*?<b>.*?</b>.*?</tr>%ims', $contents, $x)===FALSE)
{...}
$contents,使用file_get_contents() 从this source 检索。
简化了正则表达式以解决问题。我实际使用的代码是:
if(preg_match(
'%Areas of Study: </P>.*?<TABLE BORDER="0">(.*?)<TBODY>.*?</TBODY>.*? </TABLE>%ims',
$contents, $course_list)
)
{
if(preg_match_all('%<TR>.*?<TD.*?>.*?<B>(.*?)</B>.*?</TD>.*?<TD.*?>.*?</TD>.*?<TD.*?>.*?<B>(.*?)</B>.*?</TD>.*?</TR>%ims',
$course_list[0], $course_titles)
)
{
...
}
else
{
die('<p>ERROR: first preg_match_all fails</p>');
}
echo '<p>INFO: Courses found</p>';
}
else
{
die('<p>ERROR: Courses not found</p>');
}
if(
preg_match_all('%<tr.*?>.*?<b>.*?first '.$college.' area of study.*?</b>.*?</tr>.*?<tr.*?>.*?<td.*?>.*?<b>(.*?) \((.*?)\).*?</b>(.*?credits.*?)</td>.*?<td.*?>(.*?<a .*?)</td>.*?</tr>%ims',
$contents, $course_modules))
{
....
}
else
{
die('<p>ERROR: Courses details/streams not found</p>');
}
我总是得到:
信息:找到的课程
错误:找不到课程详细信息/流
奇怪的是,其他正则表达式函数调用似乎如何工作,但不是最后一个。
注意:
这个正则表达式以前有效(实际上更复杂)。我不确定这是否重要,但是我更新了我的 WAMP 版本(因此我的 php.ini 等被重置)并且我在上周对 MongoDB 连接问题进行故障排除时弄乱了我的设置.
【问题讨论】:
-
因为你在HTML上使用它stackoverflow.com/questions/1732348/…即使你这次找到了一个聪明的解决方案,明天你更新你的___时它会失败。 FWIW,这可能与区分大小写有关吗?
-
@Amarghosh 我学习了一个关于使用正则表达式解析 HTML 的整个模块:哦,我们的 CS 部门负责人也教过这个模块!源不是 xHTML 是否重要?来源:ucc.ie/calendar/science/sci002.html
-
@Amarghosh 我在分隔符之后的末尾有
i...这使得它不区分大小写 -
看起来应该对我有用。只是在黑暗中拍摄,但也许可以尝试更改分隔符(# 而不是 %)。
-
@ChristopherJohnson 谢谢,但不行
标签: php regex html-parsing wamp preg-match-all