【问题标题】:Preg_replace in phpphp中的preg_replace
【发布时间】:2011-02-16 01:25:52
【问题描述】:

我想替换 {content} 中包含的字符串中的内容。它是多行等。 preg_replace 函数应该删除整个 { com 没有垫子 回复 }

【问题讨论】:

    标签: php regex templates


    【解决方案1】:

    试试这个:

    $result = preg_replace('/\{[^}]*\}/s', 'replacement content', $subject);
    

    【讨论】:

    • 你的和上面的有什么区别。两者都在工作
    • 作者似乎也想替换 {},所以这对我来说看起来不错。圆括号是不必要的。 +1
    • 同意圆括号,固定!
    • @Highly Irregular 我也这么认为,但事实证明他们没有 *(请参阅my answer 上的 cmets)。
    【解决方案2】:

    更新

    $str = preg_replace('/(?<=\{).+?(?=\})/s', '', $str);
    

    See it.

    【讨论】:

    • 你的和下面的有什么区别。两者都在工作
    • @user381595 这些答案没有浮动排序顺序,因此请链接到有问题的答案。我假设您正在谈论的那个,它们非常相似,除了我的使用不贪婪的匹配而不是明确地寻找结束字符,而且我的必须在{} 之间至少有一个字符。我的也没有不必要的捕获组,除非您想重用捕获的文本:)
    • 很抱歉,这应该会删除 {comment},但我刚刚意识到它会删除 {} 之间的所有内容。对于给您带来的不便,我们深表歉意,但请您修改一下,使其仅删除 {asterisk comment asterisk}
    • @user381595 当然,请参阅更新。我认为这就是你想要的 - 它不消耗星号,所以 {something} 将被替换为 {}
    • @user381595 你为什么不接受这个……它不再是你需要的吗?
    【解决方案3】:

    preg_match_all('/{*([^}]+*)}/s'), $content, $matches)

    【讨论】:

      【解决方案4】:

      这是怎么回事?

      preg_match_all('/\{([^}]+\)}/s'), $content, $matches)
      

      您需要s 修饰符才能使表达式与换行符一起使用。 $matches 数组将包含您可以替换的所有匹配段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-14
        • 2013-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多