2010-02-10 115 views
0

我有一个注释块,它看起来像这样;用于解析PHP中注释变量的正则表达式

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

或类似的;

/* 
variable1: value 
variable2: value 
*/ 

我需要的是能够匹配任意数量的变量/值对并将它们添加到数组中。我似乎无法弄清楚,但我一直在纠正错误的东西。

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

UPDATE:

我最终什么样的主意是所选答案的轻微扩张去;

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

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

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

你能后的正则表达式,你试图得到错误的结果?也许你不太远。 – 2010-02-10 23:51:23

+0

我们可以假设我们可以从一个字符串$ s开始,该字符串恰好包含一个注释块并且没有其他数据? – 2010-02-10 23:53:02

+0

你应该对待两个例子吗? – FrustratedWithFormsDesigner 2010-02-10 23:53:31

回答

1

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

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

我假设你的东西被拉断的注释块像

\/\*.*?\*\/ 

.集相匹配任何东西。

+0

那种作品。它匹配整个变量行,不分出名称和值。是否有可能在一个正则表达式中将其分割为键/值对,还是需要另一个传递?另外值需要支持空格,所以\ w *不起作用。 – 2010-02-11 00:01:46

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 
) 

现在你可以使用爆炸分开这些变量等。