0

誰かがこれを手伝ってくれませんか...私は正規表現があまり得意ではなく、何日も頭を叩いています!

Smartyでは、変数$strにキャプチャされた中括弧に含まれるこの配列o値があります。

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

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

Update2 @ lorenzo:label1: \"value1\",label2: \"value2\"私の文字列と一致する場合、次のように{から}までの新しい文字列で上書きします{label1: \"value1\",label2: \"value2\",label3: \"value3\",label4: \"value4\"}

内容:保存されているvalue1とvalue2がテスト文字列と一致するかどうかを確認し、正の場合は->他のすべての値(4,5,6)を新しい文字列値で更新します。

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

4

2 に答える 2

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}

出力します

{"label1":"value1","label2":"value2","label3":"hello world","label4":"value4"}
于 2012-03-23T10:18:32.973 に答える
0

解決策(主題に関するヒントが必要な場合があります):

  1. この便利なオンラインツールを使用して、式の正しいphpフォーマットを取得しました:http ://www.techeden.com/regex

  2. 次に、CMSMS管理者にphpスニペット(udt)を作成して、一致するものが見つかったときに{から}に置き換えます。

    $result = preg_replace('/.*(?:label1\: \\\\\"'.$params['value1'].'\\\\\").*(?:label2\: \\\\\"'.$params['value2'].'\\\\\").*[}]/m', $params['replace'], $params['str']);
    
于 2012-03-23T11:10:00.520 に答える