2010-02-10 68 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 
) 

現在你可以使用爆炸分開這些變量等。