регулярное выражение с PHP - PullRequest
0 голосов
/ 28 декабря 2010

Я хочу проанализировать файл шаблона и найти определенный набор переменных, которые выглядят так:

<!-- [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);

но положительного результата нет.

спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 28 декабря 2010
<code><?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) . '
';?>

Этот код выводит примерно так:

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
                )

        )

)

Если этот массив выглядит не совсем так, как вы хотите, я могу написать еще немного кода для его преобразования.

0 голосов
/ 28 декабря 2010

спасибо за ваш ответ, но уже пробовал

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

print_r (соответствует $);

вывод выглядит так:

Array ( [0] => Array ( ) [name] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [name] => Array ( ) [1] => Array ( ) )
0 голосов
/ 28 декабря 2010

Похоже, вы не избегаете своих специальных символов .. например,

[LOOP

должно быть

\[LOOP

в вашем шаблоне регулярных выражений.

...