【问题标题】:PHP: replace all occurrences of "[CODE]...[/CODE]" in a stringPHP:替换字符串中所有出现的“[CODE]...[/CODE]”
【发布时间】:2023-03-09 00:42:01
【问题描述】:

我有一个这样的字符串:

Here is my code sample, its not too great:

[CODE]
<?php
    echo "Some testing...";
?>
[/CODE]

I hope you enjoy.

现在我想用返回值highlight_string($content_of_CODE) 替换所有出现的 [CODE] ... [/CODE]。 [CODE]..[/CODE] 对可能在字符串中出现多次。

如何在不使用 eval 的情况下解决这个问题?

感谢您的帮助!

【问题讨论】:

    标签: php regex tags


    【解决方案1】:

    假设[CODE] 块没有嵌套,preg_replace_callback() 是一个完美的候选者。

    preg_replace_callback('/\[CODE\](.*?)\[/CODE\]/', 'highlight_string');
    

    【讨论】:

    • 我刚刚看到 highlight_string 有第二个参数,我如何使用你的回调方法设置它? (我必须将第二个参数设置为 true)
    • 查看文档,默认发送$matches。不确定是否发送第二个参数,但您总能找到另一种方法来确定如何调用 highlight_string(),例如is_array().
    • 我总是收到这个错误:未知修饰符“C”。我正在使用这个文本:Ok, ich habe eingesehen, dass Java crappy und buggy ist. PHP For The Win!! 和你的正则表达式...
    • 好吧,我不得不稍微纠正一下:/\[CODE\](.*?)\[/CODE\]/ 变成了/\[CODE\](.*?)\[\/CODE\]/。但现在我只得到第一次出现,而不是全部......
    【解决方案2】:

    content_of_CODE = reg_replace('/[!\s+!]|[\s*/*CODE]/' , ' ' , $content_of_CODE);

    【讨论】:

      【解决方案3】:

      使用这个正则表达式:

      (?s)\[CODE\].*?\[/CODE\]
      

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 2013-12-06
        • 2014-08-05
        • 1970-01-01
        • 2019-01-10
        • 2018-07-11
        • 2012-08-01
        • 1970-01-01
        • 2011-02-23
        相关资源
        最近更新 更多