`<html>
<head>
<title>DailyHoroscope.com</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
{if $contact['timezone']}
{assign var=local_tz value=$contact['timezone']}
{else}
{assign var=local_tz value='America/New_York'}
{/if}
{assign var=tracking_params value="utm_medium={$medium}&utm_source={$source}&utm_campaign={$campaign}"}
</head>
<body style="background:#fff;">
</body>
</html>`
在这段代码中,我需要在{}中获得子串。 我正在使用此RegEx
/\{([^}]*)\}/mig
在包含只有一个{和}的子类型的情况下,它的工作正常。像
{if $contact['timezone']}
但是这个字符串的含义---&gt;
{assign var=tracking_params value="utm_medium={$medium}&utm_source={$source}&utm_campaign={$campaign}"}
我期待整个字符串作为结果,但它返回我
{assign var=tracking_params value="utm_medium={$medium},
{$source} and {$campaign}
这是正确的,因为我的正则表达式在获得第一个'}后结束;有没有办法得到使用regEx包含相同数量的'{'和'}'的字符串?什么是RegEx?
答案 0 :(得分:1)
如果您只有1级嵌套花括号,则可以使用
\{((?:[^{}]*\{[^{}]*\})*[^}]*)\}
请参阅demo
匹配
if $contact['timezone']
assign var=local_tz value=$contact['timezone']
else
assign var=local_tz value='America/New_York'
/if
assign var=tracking_params value="utm_medium={$medium}&utm_source={$source}&utm_campaign={$campaign}"