0

私は価値に基づいて物事を示すためのテンプレートシステムを持ってい$this->cms_language()ます。この場合、$valueは正規表現パターンに一致するものに置き換えられます。http://www.getnocms.com/2012/11/better-multi-language-template-better.htmlと同じように機能します

    $language = $this->cms_language();
    $pattern = array();
    $pattern[] = "/\{\{ if_language:$language \}\}(.*?)\{\{ elif_language:.*?\{\{ end_if }}/s";
    $pattern[] = "/\{\{ if_language:$language \}\}(.*?)\{\{ else \}\}.*?\{\{ end_if }}/s";
    $pattern[] = "/\{\{ if_language:$language \}\}(.*?)\{\{ end_if }}/s";
    $pattern[] = "/\{\{ if_language:.*?\{\{ elif_language:$language \}\}(.*?)\{\{ elif_language:.*?\{\{ end_if }}/s";
    $pattern[] = "/\{\{ if_language:.*?\{\{ elif_language:$language \}\}(.*?)\{\{ else \}\}.*?\{\{ end_if }}/s";
    $pattern[] = "/\{\{ if_language:.*?\{\{ elif_language:$language \}\}(.*?)\{\{ end_if }}/s";
    $pattern[] = "/\{\{ if_language:.*?\{\{ else \}\}(.*?)\{\{ end_if }}/s"; 
    $replacement = '$1';
    $value = preg_replace($pattern, $replacement, $value);

これまでのところ、すべてがとても良かった。しかし、その後、私は問題に気づきました。たとえば、これらのパターンのいずれかを含むテキスト領域または入力を記述します。何かのようなもの:

$value = '<input value="{{ if_language:indonesia }} do_something {{ end_if }}" />';

正規表現と一致していても、入力値を置き換えたくありません。ここでは多くのパターンを使用しているので、これを回避する最も効果的な方法は何ですか?

4

1 に答える 1

1

追加してみてください

foreach ($pattern as &$p) {
  $p = preg_replace("/^\//", "/(?![^<>]*>|(?:[^>]*<\/(?:[tT][eE][xX][tT][aA][rR][eE][aA]|[sS][eE][lL][eE][cC][tT])[^<>]*>))", $p);

}}

preg_replaceほとんどの場合、これを回避するために既存の前に。

このデモを参照してください。

于 2012-11-20T14:28:09.987 に答える