2012-03-22 24 views
0

誰もがこれを手伝ってくれますか...正規表現はあまりよくありません。私は数日から頭を叩いています!Smarty regex_replaceは中括弧で一致する式

はSmartyの、私は値Oこの配列は、変数$ STRに捕捉中括弧内に含まれている:

{capture assign=str}{literal} 
{label1: \"value1\",label2: \"value2\", label3: \"value3\",label4: \"value4\"}, 
{label1: \"value1b\",label2: \"value2b\", label3: \"value3b\",label4: \"value4b\"}, 
... 
{/literal}{/capture} 

IがLABEL1場合({へ}から)ラベルおよび一連の値を上書きする必要がある:\」をvalue1 \ "は私の文字列と一致します。

これは私がこれまでに得たものである...

{capture assign=foo_regex}{literal}/[{label1:\s*\\"{/literal}{$smarty.get.value1}{literal}\\",\s*label2:\s*\\"{/literal}{$smarty.get.value2}{literal}\\"].*[}]/g{/literal}{/capture} 
{capture assign=foo_replace}{literal}{-my new string-}{/literal}{/capture} 
{$str|regex_replace:$foo_regex:$foo_replace} 

そこに任意のウィザードが助けてください? ありがとうございます!

更新: 私は正しい表現で出てきましたが、Smarty正規表現ではうまくいきません...何が間違っていますか? http://regexr.com?30dnp

ロレンツォ@アップデート2:label1: \"value1\",label2: \"value2\"は私の文字列に一致したとき、私はこの{label1: \"value1\",label2: \"value2\",label3: \"value3\",label4: \"value4\"}

のような{に}から新しい文字列で上書きそれはどういう:保存value1とvalue2のは、私のテスト文字列と一致する場合は正の場合は、チェック - >他のすべての値(4,5,6)を新しい文字列値で更新します。

私が達成したいことが今より明確になりたいと思っています。

+0

を使用すると、Smartyの中でそれをしなければならないのはなぜ?あなたはPHPやJSでそれを行うことはできません(それはJSONと思われますか?) –

+0

私はスマートなプラグインを書くためにPHPを使うことができたと思います。私はスマートなテンプレートでそのデータを受け取ります。 – Tron

+0

より良いインデントで質問を改善し、入力だけでなく正確な出力を提供します。 –

答えて

0

Solution output:

  1. がこのuseful online toolとmy expressionためformatting correct phpをgot :http://www.techeden.com/regex

  2. 次に、私のC言語でPHPスニペット(udt)を作成しました。 MSMS管理者は、一致が見つかったときから、{}に置き換えるために:

    $result = preg_replace('/.*(?:label1\: \\\\\"'.$params['value1'].'\\\\\").*(?:label2\: \\\\\"'.$params['value2'].'\\\\\").*[}]/m', $params['replace'], $params['str']); 
    
1

Smarty3を使用している場合は、文字列の再生を停止し、適切な構造を使用することができます。

{* ordinary array, could've been assign()ed *} 
{$labels = [ 
    "label1" => "value1", 
    "label2" => "value2", 
    "label3" => "value3", 
    "label4" => "value4" 
]} 

{if $labels.label3 == 'value3'} 
{$labels.label3 = 'hello world'} 
{/if} 

{$labels|json_encode|escape} 

would(subject上hint need may others用)

{"label1":"value1","label2":"value2","label3":"hello world","label4":"value4"} 
+0

はい。 Smarty3を使うことは素晴らしいことです! ;-) – Tron