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 回答