【问题标题】:How to use the substr() function inside preg_replace() function?如何在 preg_replace() 函数中使用 substr() 函数?
【发布时间】: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


【解决方案1】:

使用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

【讨论】:

  • 谢谢!我想我以后会用这个。
【解决方案2】:

应该是这样的

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

substr 在字符串的“外部”。

【讨论】:

  • 更新了我的帖子,我的正则表达式似乎确实有效。反正我试过你的方法,还是不行。
猜你喜欢
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2020-06-05
相关资源
最近更新 更多