【发布时间】:2019-01-20 21:40:39
【问题描述】:
我无法弄清楚如何从包含以下内容的 html 页面获取标题:
<title>Breaking <--- *EOL
- News</title>
*注意:在“Breaking”之后有一个不可见的 EOL 或换行符。
我已经尝试了几乎所有可能处理 eol 的正则表达式,但似乎没有任何效果。它总是什么都不返回。
preg_match('/\<title.*?\>(.*?)\<\/title\>/si', $str, $match);
preg_match('/(?s)\<title.*?\>(.*?)\<\/title\>/i', $str, $match)
$titles = $dom->getElementsByTagName('title');
$title = $titles->item(0)->nodeValue;
这个正则表达式在很多情况下都能正确抓取标题,但无论我尝试什么,标签之间的 eol 总是失败。
任何有意义的解决方案将不胜感激。
【问题讨论】:
-
DOM 方法有什么问题?在这里工作正常~eval.in/1047266
-
您的第一个版本有效:ideone.com/s5u1wT
-
@Adriano 多行标志用于使
^和$匹配行的开头和结尾。s标志是他需要的,而且他已经拥有了。 -
@Barmar 我分叉了包含原始源代码的实际 html:ideone.com/67ICS3 它不起作用!
-
@dpark123 好吧,你的字符串有非转义引号。固定在这里~ideone.com/4ibFCT