PHP中regexp的问题

PHP中regexp的问题,php,html,regex,Php,Html,Regex,有趣的是,我的最后一个问题是关于同一个主题的,但唉: 我正在运行以下代码: preg_match('/<th.*>.*Organizer.*title=\".*\">(.*)<\/a>/mi', $file_string, $organizer); preg\u match('/.*Organizer.*title=\“*\”>(.*)/mi',$file\u string,$Organizer); 关于以下内容: <tr> <th valig

有趣的是,我的最后一个问题是关于同一个主题的,但唉:

我正在运行以下代码:

preg_match('/<th.*>.*Organizer.*title=\".*\">(.*)<\/a>/mi', $file_string, $organizer);
preg\u match('/.*Organizer.*title=\“*\”>(.*)/mi',$file\u string,$Organizer);
关于以下内容:

<tr>
<th valign="top"> Organizer:
</th>
<td style="width:55%;"> <a href="/starcraft2/TaKe" title="TaKe">TaKe</a>
</td></tr>

组织者:

我一辈子也弄不明白为什么它不起作用。我可以让它匹配Organizer:with the regexp'/.*Organizer',但似乎只要有新行,它就会停止工作,尽管有/m选项。有什么想法吗?

默认情况下,点元字符与换行符不匹配。如果还希望
匹配换行符,则需要
s
修饰符

从:

如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。没有它,新行被排除在外


然而,使用正则表达式解析HTML通常不是一个好主意。我建议您改为使用。

好的,因此问题是新行常量,但是此正则表达式将获得
a
元素的文本:

<th.*|\n>.*|\nOrganizer.*|\n*title=".*">(.*)<\/a>

但是您需要发送一个附加的修饰符-
s
。这里有一个例子来证明这一点。

这是多行输出吗?因为我相信您的正则表达式没有说它应该遍历行,所以默认情况下它只在一行上工作我的错,php的
m
行为是多行的您的问题是
*
与newlines不匹配
/s
不是您要找的修饰符吗?如果您使用/m选项,那么第一段代码将匹配所有内容,直到最后一段代码,这就是您的问题。为什么不使用DOTALL修饰符
s
?@NiettheDarkAbsol,非常好的主意--非常感谢!你每天都能学到新东西!改为使用
s
修饰符。这要容易得多。非常感谢你的帮助,不过,我遇到了一个有趣的问题。我试图从右侧的表中获取这些数据,您提供的regexp在单独取出文本时工作正常,但一旦我尝试获取包含文件\u get\u contents()的页面并在其上运行regexp,匹配就停止工作。有什么想法吗?也许这本身就是一个问题。
<th.*>.*Organizer.*title=".*">(.*)<\/a>