簡體   English   中英

RegEx:從可能包含多個“ {”和“}”的字符串中提取子字符串

[英]RegEx: Extract substring from a string which may contain several number of '{' and '}'

`<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']}

但是如果是這個字符串--->

{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?

如果您只有1級嵌套花括號,則可以使用

\{((?:[^{}]*\{[^{}]*\})*[^}]*)\}

觀看演示

火柴:

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}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM