坚持正则表达式

时间:2012-07-04 13:52:46

标签: php regex

我想要匹配的模式是[{Any text between here}]

我的正则表达式:

/\[\{[\W\w]*?\}\]/

我正在使用preg_match_all()

它到目前为止工作但我想知道是否有更好的解决方案?

4 个答案:

答案 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}}]
        )

)