有趣的是,我的上一个问题是关于同一主题的,但唉:
我正在运行以下代码:
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选项。有什么想法吗?
答案 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。