用于在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*不起作用。