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

用于在PHP中解析注释变量的正则表达式,php,regex,variables,comments,Php,Regex,Variables,Comments,我有一个评论块,可以这样看 /** * variable1: value * variable2: value */ /* variable1: value variable2: value */ 或者像这样, /** * variable1: value * variable2: value */ /* variable1: value variable2: value */ 我需要的是能够匹配任意数量的变量/值对,并将它们添加到数组中。但我似乎不明白,我一直在匹配错误的东

我有一个评论块,可以这样看

/**
 * variable1: value
 * variable2: value
 */
/*
variable1: value
variable2: value
*/
或者像这样,

/**
 * variable1: value
 * variable2: value
 */
/*
variable1: value
variable2: value
*/
我需要的是能够匹配任意数量的变量/值对,并将它们添加到数组中。但我似乎不明白,我一直在匹配错误的东西

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

更新:

最后,我对选定的答案进行了一点扩展

/(\w)*\s*:\s*([\w'"\/.: ]*)/
它允许URL像这样用作值

/**
 * url: 'some/file.png'
 * url: "http://www.google.ca/intl/en_ca/images/logo.gif"
 */
这不管用吗?(假设启用了多行匹配)

我猜你是用类似这样的东西来删除评论栏的

\/\*.*?\*\/
设置为匹配任何内容。

您可以尝试以下操作:

$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);
}

现在,您可以使用explode等分离这些变量。

如果您试图得到错误的结果,是否可以发布正则表达式?也许你还不算太远。我们可以假设我们可以从一个字符串$s开始,它只包含一个注释块,没有其他数据吗?你的两个例子应该是一样的吗?我错了。我根本不知道如何匹配变量,所以我尝试匹配所有/或*字符并将其从输出中删除,然后通过explode on:逐行运行输出,并从每个变量名称和值中修剪开始和结束空格。是的,我可以使用explode删除除注释块之外的所有内容,如果我需要的话,那就行了。它匹配整个变量行,而不拆分名称和值。是否可以在一个正则表达式中将其拆分为键/值对,或者是否需要另一个过程?该值还需要支持空格,因此\w*不起作用。