【发布时间】:2012-12-28 19:11:27
【问题描述】:
这是我目前所拥有的,但无论我尝试什么,我的album-content 都不会被substr() 截断。
$gallery = preg_replace('/(<div class="album-content">)(.*?)(<\/div>)/e', "'$1' . substr(\"$2\", 0, 50) . '$3'", $gallery);
更新:
原来我的班级名称不正确,而我的正则表达式似乎确实有效。 我只需要再做一次 str_replace() 来取消转义输出。
$gallery = preg_replace('/(<div class="album-desc">)(.*?)(<\/div>)/e', "'$1' . substr(\"$2\", 0, 50) . '$3'", $gallery);
$gallery = str_replace('\"album-desc\"', '"album-desc"', $gallery);
修改前的输出:
<a href="..." class="album">
<div class="album-content"><p class="album-title">Album 1</p>
<div class="album-desc"><p>This will be truncated by substr().</p></div>
</div>
<img src="..." />
</a>
无论如何,谢谢大家!
【问题讨论】:
-
请在内容前后发布一些内容,以便我们更好地了解您想要做什么。
-
你不能使用
substr()作为替换字符串的一部分 -
@MathieuImbert 它现在似乎确实有效。查看我的更新。
-
@fishbaitfood 这很奇怪。能提供完整的测试用例吗?带有
$gallery的样本和结果输出? -
不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用 PHP 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/php.html。
标签: php regex html-parsing