麻烦用PHP中的正则表达式

时间:2014-01-15 13:18:41

标签: php html regex

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

我正在运行以下代码:

preg_match('/<th.*>.*Organizer.*title=\".*\">(.*)<\/a>/mi', $file_string, $organizer);

关于以下内容:

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

我不能为我的生活弄清楚为什么它不起作用。我可以得到它来匹配Organizer:与正则表达式'/.*Organizer',但似乎只要有一个新的行它停止工作,尽管有/ m选项。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

注意表达式*|\n

以下是Regex 101来证明这一点。


Niet所述,您可以使用s修饰符。正则表达式将是:

<th.*>.*Organizer.*title=".*">(.*)<\/a>

但你会发送一个额外的修饰符 - s。这是一个Regex 101来证明它。

答案 1 :(得分:0)

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

来自PHP manual

  

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

但是,使用正则表达式解析HTML通常是一个坏主意。我建议你改用DOM Parser