我正在尝试使preg_replace_callback仅在不包含某个字符的情况下返回匹配项。
所以如果字符串包含:
{xxxx}
返回一场比赛。 如果它包含:
{xxxx|xxxx}
不要返回比赛。
这是我的尝试:
\{(.*?!\|.*)}
谢谢你们!
答案 0 :(得分:1)
您正在寻找character classes。这是“任何字符,除了 |
”:
[^|]
答案 1 :(得分:1)
应该是/{([^|])*}/
。它将匹配任何没有|
字符的字符串,甚至是空字符串。
这更像是一种“黑名单”方法。如果您知道有效字符是什么,则应使用“白名单”方法(字符类[]
中允许的字符列表),因为当前方法还允许使用{{1}等字符在字符串中。
答案 2 :(得分:1)
您的完整模式将是:
/{([^|]*)}/
匹配任何不是管道的字符,缠绕在花括号上。