【问题标题】:preg_replace_callback (regex) if string doesn't contain characterpreg_replace_callback (regex) 如果字符串不包含字符
【发布时间】:2012-06-13 06:44:44
【问题描述】:

我试图让 preg_replace_callback 仅在不包含特定字符时才返回匹配项。

所以如果字符串包含:

{xxxx}

返回匹配项。 如果包含:

{xxxx|xxxx}

不返回匹配项。

这是我的尝试:

\{(.*?!\|.*)}

谢谢你们!

【问题讨论】:

    标签: php regex preg-replace-callback


    【解决方案1】:

    应该是/{([^|])*}/。它将匹配任何没有| 字符的字符串,甚至是空字符串。

    这更像是一种“列入黑名单”的方法。如果您知道有效字符是什么,则应使用“白名单”方法(字符类[] 中允许的字符列表),因为当前方法也允许字符串中包含#$!@~<?>":'{}[] 等字符.

    【讨论】:

    • 为什么当我应用此更改时它会导致我的 localhost apache 服务器崩溃?
    【解决方案2】:

    您的完整模式将是这样的:

    /{([^|]*)}/
    

    匹配任何不是管道的字符,用花括号括起来。

    【讨论】:

    • 是的。正是我需要的。谢谢:)
    【解决方案3】:

    您正在寻找character classes。这是“任何字符除了 |”:

    [^|]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 2010-11-22
      • 2021-05-30
      • 2022-08-19
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多