0

テンプレート ファイルを解析して、次のような特定の変数セットを見つけたいと考えています。

<!-- [LOOP-VARIABLENAME] -->

変数名と一致の開始位置を取得したいだけです。最初に strpos() を使用しましたが、これは関数が正規表現引数を取ることができないためです。

Array (
  [0] => 1678 // strpos
  [1] => <!-- [LOOP-VARIABLENAME] --> // full match
  [name] => VARIABLENAME
)

これは可能ですか?私はこの正規表現を使用しようとしました:

preg_match_all('/<!-- [LOOP-(?P<year>\W+)/', $html, $matches, PREG_OFFSET_CAPTURE);

しかし、肯定的な結果はありません。

ご協力いただきありがとうございます。

4

3 に答える 3

0

特殊文字をエスケープしていないようです..たとえば、

[LOOP

する必要があります

\[LOOP

あなたの正規表現パターンで。

于 2010-12-27T21:52:53.643 に答える
0
<?php

$html = "jg<!-- [LOOP-VARIABLENAME] -->sdfsdfsdf<!-- [LOOP-TESTNAME] -->sfdsdffsd";

preg_match_all('/<!-- \[LOOP-(\w+)]\ -->/', $html, $matches, PREG_OFFSET_CAPTURE);

echo '<pre>' . print_r($matches, true) . '</pre>';

?>

このコードは、次のような出力を提供します。

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 
                    [1] => 2 //position where matching <!-- starts, 1st var
                )

            [1] => Array
                (
                    [0] => 
                    [1] => 39  //position where matching <!-- starts, 2nd var
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => VARIABLENAME
                    [1] => 13  //position where VARIABLENAME starts
                )

            [1] => Array
                (
                    [0] => TESTNAME
                    [1] => 50 //position where TESTNAME starts
                )

        )

)

その配列が希望どおりに見えない場合は、それを変換するためのコードをさらに記述できます。

于 2010-12-27T22:02:01.960 に答える
0

返信ありがとうございますが、私はすでにこれを試しました:

preg_match_all('/<!-- \[LOOP-(?P<name>\W+)/', "<!-- [LOOP-VARIABLENAME] -->", $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

出力は次のようになります。

Array ( [0] => Array ( ) [name] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [name] => Array ( ) [1] => Array ( ) )
于 2010-12-27T22:02:14.223 に答える