PHP的正则表达式问题

时间:2010-12-27 21:36:16

标签: php regex preg-match-all strpos

我想解析模板文件并找到一组特定的变量:

<!-- [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 :(得分:0)

看起来你没有逃脱你的特殊字符..例如,

[LOOP

应该是

\[LOOP

你的正则表达式。

答案 1 :(得分: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
                )

        )

)

如果那个数组看起来不怎么样,我可以写一些代码来改造它。

答案 2 :(得分:0)

感谢您的回复,但已经尝试了这个

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 ( ) )