用于在PHP中解析注释变量的正则表达式

时间:2010-02-10 23:48:18

标签: php regex variables comments

我有一个看起来像这样的评论栏;

/**
 * variable1: value
 * variable2: value
 */

或者像这样;

/*
variable1: value
variable2: value
*/

我需要的是能够匹配任意数量的变量/值对并将它们添加到数组中。我似乎无法解决这个问题,但我一直在配错。

所有变量都是单行的,因此应该简化一些事情。应忽略“变量”之前或冒号之后的空格,但应保留值行中的任何其他空格。

更新:

我最终得到的是所选答案的轻微扩展;

/(\w)*\s*:\s*([\w'"\/.: ]*)/

它允许将URL用作像这样的值;

/**
 * url: 'some/file.png'
 * url: "http://www.google.ca/intl/en_ca/images/logo.gif"
 */

2 个答案:

答案 0 :(得分:1)

这不起作用吗? (假设启用了多行匹配)

(\w)*\s*:\s*(\w*)

我假设您使用类似

之类的内容删除了注释区块
\/\*.*?\*\/

.设置为匹配任何内容。

答案 1 :(得分:0)

你可以试试这个:

$str=<<<A
/**
 * variable1: value
 * variable2: value
 */

some text

/*
variable1: value
variable2: value
*/

A;

preg_match("/\/\*(.*?)\*\//sm",$str,$matches);
foreach($matches as $k=>$v){
    $v = preg_replace("/\/|\*/sm","",$v);
    $v = array_filter(explode("\n",$v));
    print_r($v);
}

输出

$ php test.php
Array
(
    [1] =>   variable1: value
    [2] =>   variable2: value
    [3] =>
)
Array
(
    [1] => variable1: value
    [2] => variable2: value
)

现在你可以使用explode等来分隔这些变量。