我有幾個PHP文件,我想手動解析一個數組的值,而不使用PHP引擎。如何提取此?
他們看起來像這樣:
$LANG['help']['attribute_label'] = 'Label';
和其他人只有一個屬性,像這樣:
$LANG['adm_something'] = 'Label';
我需要提取「標籤」,而不從所有線路報價。我還沒有找到匹配的正則表達式模式。我也打開其他選項。
我有幾個PHP文件,我想手動解析一個數組的值,而不使用PHP引擎。如何提取此?
他們看起來像這樣:
$LANG['help']['attribute_label'] = 'Label';
和其他人只有一個屬性,像這樣:
$LANG['adm_something'] = 'Label';
我需要提取「標籤」,而不從所有線路報價。我還沒有找到匹配的正則表達式模式。我也打開其他選項。
preg_match("/\\\$LANG['a-zA-Z\[\]_]*\s=\s\'([A-Za-z0-9]+)/", $line, $matches);
$matches[1]
將包含在這兩個規定的情況字標籤
preg_match_all("/(\\\$[^=]*)[\s\t\r\n]*=[\s\t\r\n]*([^\r\n]*);/s", file_get_contents('-- PUT THE FILE NAME HERE--'), $matches);
$results = array();
foreach ($matches[1] as $key=>$var) {
$results[trim($var)] = trim(trim($matches[2][$key], '\'"'));
}
var_dump($results);
這會發現所有的變量聲明的文件中,單或雙引號,以及整數值工作(他們不一定需要用引號)或者甚至是數組。請注意,它只能在整個值在一行的地方工作 - 而且它對整個正則表達式來說非常愚蠢。但它應該適用於這種情況。
這個作品完美! – 2013-03-07 16:42:19
如何捕捉那些與Regex不匹配的行? – 2013-03-07 16:43:34
你真的有這樣的線嗎?是否有一個特定的原因,你不能只包含文件並引用變量? – 2013-03-07 16:46:48
preg_match_all('/= \'(.+)\';/', '$LANG[\'help\'][\'attribute_label\'] = \'Label\';', $matches);
print_r($matches);
Array
(
[0] => Array
(
[0] => = 'Label';
)
[1] => Array
(
[0] => Label
)
)
例如:'$ LANG ['test'] ='XYZ';'你想讓正則表達式返回'XYZ'? – Walls 2013-03-07 16:14:20
難道你不能簡單地包含文件? PHP引擎會爲你解析...... – 2013-03-07 16:16:06
不。我正在使用$ file_handle遍歷每一行,並且需要一直提取XYZ。我檢查是否第一個字符是$ .. – 2013-03-07 16:20:09