Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在preg_replace()函数中使用substr()函数?_Php_Regex_Html Parsing - Fatal编程技术网

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

Php 如何在preg_replace()函数中使用substr()函数?,php,regex,html-parsing,Php,Regex,Html Parsing,这就是我到目前为止所拥有的,但无论我如何尝试,我的专辑内容都不会被substr()截断 $gallery=preg\u replace(“/()(.*?)()/e',“$1.”substr(\“$2\”,0,50)。“$3',$gallery); 更新: 结果发现我的类名不正确,我的正则表达式似乎也能工作。 我只需执行另一个str_replace()即可取消对输出的转义 $gallery = preg_replace('/(<div class="album-desc">)(.*?

这就是我到目前为止所拥有的,但无论我如何尝试,我的
专辑内容都不会被
substr()
截断

$gallery=preg\u replace(“/()(.*?)()/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);
$gallery=preg\u replace(“/()(.*?)()/e',“$1.”substr(\“$2\”,0,50)。“$3',$gallery);
$gallery=str_replace(“\”相册说明“,“”相册说明“,$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>


无论如何,谢谢大家

使用
preg\u replace\u callback()

必须是

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

使用字符串的substr“outside”。

请发布一些前后内容,以便我们更好地了解您想要做什么。您不能使用
substr()
作为替换的一部分string@MathieuImbert不过,它现在似乎确实起作用了。请看我的更新。这很奇怪。你能提供一个完整的测试用例吗?对于
$gallery
示例和结果输出,请不要使用正则表达式解析HTML。无法使用正则表达式可靠地解析HTML。一旦HTML改变了您的预期,您的代码就会被破坏。有关如何使用PHP模块正确解析HTML的示例,请参阅。我试过你的方法,但没用。谢谢!我想我将来会用这个。
$replace = preg_replace_callback('/(asd)f/i', function($matches) {
    $matches[1] = substr($matches[1], 0, 2);

    return $matches[1];
}, 'asdf');
..., "'$1'" . substr("$2", 0, 50) . "'$3'", ...