【问题标题】:PHP Regex Get Text Between BBCode TagsPHP Regex 获取 BBCode 标签之间的文本
【发布时间】:2012-03-09 20:39:21
【问题描述】:

我需要有关以下 PHP 代码的帮助:

获取给定字符串中每次出现的 BBCode 标记 [code] 和 [/code] 之间的文本,以便我可以将空格 ' ' 替换为 nbsp 字符。

长话短说,我不能使用 CSS 或 DOM 来执行此操作,我需要在服务器上执行此操作。

#[code](.*?)[/code]# 似乎只有在开始和结束标记之间没有换行符(或换行符)时才有效.... :(

【问题讨论】:

    标签: php regex


    【解决方案1】:

    我认为您正在寻找类似的东西

    <?php
    preg_match_all("/\[code\](.*?)\[\/code\]/ism", $search, $match);
    

    悬停,我建议你改用 BBcode 解析器


    要将所有空格替换为&amp;nbsp;,只需使用preg_replace_callback

    <?php
    $text = preg_replace_callback("/\[code\](.*?)\[\/code\]/ism", function($match) {
         return str_replace(" ", "&nbsp;", $match[1]);
    }, $search);
    

    【讨论】:

    • 这也太贪心了。需要使用 (.*?) 以便获取代码块的每个实例。
    • 这成功了!但是,如何替换与 &nbsp 匹配的所有内容中的空格 ' ' 并在最后返回整个修改后的字符串?谢谢!
    • @Martin。如何更改它以便可以用 &nbsp 替换空格。你的模式给了我一个字符串数组,其中包含代码标签之间的文本,但是我如何替换那里的空格,然后用现在修改的空格返回所有原始字符串?
    • 没关系,我通过一系列 str_replace 调用得到了它。糟糕的编程,我并不真正为之骄傲,但它会起作用。感谢@Martin 和 jasonbar 的帮助。
    • @Max 抱歉,我还没有回答你关于空间的问题,我度过了糟糕的一天,忘记了我以前是怎么做的。打回来!在这里,我已经编辑了我的答案,所以你可以使用更少的蹩脚代码:)
    猜你喜欢
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多