preg_replace_callback(regex)如果string不包含字符

时间:2012-06-09 14:36:57

标签: php regex preg-replace-callback

我正在尝试使preg_replace_callback仅在不包含某个字符的情况下返回匹配项。

所以如果字符串包含:

{xxxx}

返回一场比赛。 如果它包含:

{xxxx|xxxx}

不要返回比赛。

这是我的尝试:

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

谢谢你们!

3 个答案:

答案 0 :(得分:1)

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

[^|]

答案 1 :(得分:1)

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

这更像是一种“黑名单”方法。如果您知道有效字符是什么,则应使用“白名单”方法(字符类[]中允许的字符列表),因为当前方法还允许使用{{1}等字符在字符串中。

答案 2 :(得分:1)

您的完整模式将是:

/{([^|]*)}/

匹配任何不是管道的字符,缠绕在花括号上。