我想要匹配的模式是[{Any text between here}]
我的正则表达式:
/\[\{[\W\w]*?\}\]/
我正在使用preg_match_all()
它到目前为止工作但我想知道是否有更好的解决方案?
答案 0 :(得分:2)
如果您想查找包含[{
和}]
的匹配项,请使用
/\[\{[^}]+\}\]/
如果您想在文字内部进行匹配,请使用
/(?<=\[\{)[^}]+(?=\}\])/
如果内部文字可能包含}
字符(例如 [{hello} yellow}] ),则在上述两种正则表达式模式中将[^}]+
替换为.+?
。原始模式具有更好的性能,因为它们不使用惰性运算符?
。
答案 1 :(得分:2)
您可以将其简化为
\[\{.*?\}\]
甚至
\[{.*?}]
但除此之外它看起来还不错。
修改强>
请注意,虽然正则表达式执行了所需操作,但由于使用了惰性运算符,性能不是最佳的。
通过像RegexBuddy这样的工具进行审核时,此正则表达式需要 21步才能达到解决方案,而@Ωmega的解决方案只需要 5个步骤。
答案 2 :(得分:1)
使用此正则表达式(?<=\[\{)(.+?)(?=\}\])
答案 3 :(得分:1)
键“U”使正则表达式引擎不贪心:
preg_match_all('_\[{.*}\]_U', '[{safda}adsfsf}}][{safda}adsfsf}}]', &$matches);
提供 $matches
:
Array
(
[0] => Array
(
[0] => [{safda}adsfsf}}]
[1] => [{safda}adsfsf}}]
)
)