如何在preg_replace()函数中使用substr()函数?

时间:2013-01-14 19:14:31

标签: php regex html-parsing

这是我到目前为止所做的,但无论我尝试什么,我的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>

非常感谢所有人!

2 个答案:

答案 0 :(得分:3)

使用preg_replace_callback()

$replace = preg_replace_callback('/(asd)f/i', function($matches) {
    $matches[1] = substr($matches[1], 0, 2);

    return $matches[1];
}, 'asdf');

Full documentation

答案 1 :(得分:0)

它必须是

..., "'$1'" . substr("$2", 0, 50) . "'$3'", ...

字符串的substr“outside”。