【发布时间】:2012-06-13 06:44:44
【问题描述】:
我试图让 preg_replace_callback 仅在不包含特定字符时才返回匹配项。
所以如果字符串包含:
{xxxx}
返回匹配项。 如果包含:
{xxxx|xxxx}
不返回匹配项。
这是我的尝试:
\{(.*?!\|.*)}
谢谢你们!
【问题讨论】:
标签: php regex preg-replace-callback
我试图让 preg_replace_callback 仅在不包含特定字符时才返回匹配项。
所以如果字符串包含:
{xxxx}
返回匹配项。 如果包含:
{xxxx|xxxx}
不返回匹配项。
这是我的尝试:
\{(.*?!\|.*)}
谢谢你们!
【问题讨论】:
标签: php regex preg-replace-callback
应该是/{([^|])*}/。它将匹配任何没有| 字符的字符串,甚至是空字符串。
这更像是一种“列入黑名单”的方法。如果您知道有效字符是什么,则应使用“白名单”方法(字符类[] 中允许的字符列表),因为当前方法也允许字符串中包含#$!@~<?>":'{}[] 等字符.
【讨论】:
您的完整模式将是这样的:
/{([^|]*)}/
匹配任何不是管道的字符,用花括号括起来。
【讨论】:
您正在寻找character classes。这是“任何字符除了 |”:
[^|]
【讨论】: