繁体   English   中英

PHP中的regexp出现问题

[英]Trouble with regexp in PHP

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

我正在运行以下代码:

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:和regexp'/.*Organizer'匹配,但是,尽管有了/ m选项,但似乎一旦有新行它就会停止工作。 有任何想法吗?

好的,所以问题是换行常量,但是此Regex将获取a元素的文本:

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

注意表达式*|\\n

这是一个正则表达式101来证明这一点。


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

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

但您会另外发送一个修饰符s 这是一个正则表达式101来证明这一点。

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

PHP手册

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

但是,使用正则表达式解析HTML通常不是一个好主意。 我建议您改用DOM分析器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM