2013-03-07 66 views
0

我有几个PHP文件,我想手动解析一个数组的值,而不使用PHP引擎。如何提取此?

他们看起来像这样:

$LANG['help']['attribute_label'] = 'Label'; 

和其他人只有一个属性,像这样:

$LANG['adm_something'] = 'Label'; 

我需要提取“标签”,而不从所有线路报价。我还没有找到匹配的正则表达式模式。我也打开其他选项。

+0

例如:'$ LANG ['test'] ='XYZ';'你想让正则表达式返回'XYZ'? – Walls 2013-03-07 16:14:20

+1

难道你不能简单地包含文件? PHP引擎会为你解析...... – 2013-03-07 16:16:06

+0

不。我正在使用$ file_handle遍历每一行,并且需要一直提取XYZ。我检查是否第一个字符是$ .. – 2013-03-07 16:20:09

回答

0
preg_match("/\\\$LANG['a-zA-Z\[\]_]*\s=\s\'([A-Za-z0-9]+)/", $line, $matches); 

$matches[1]将包含在这两个规定的情况字标签

0
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); 

这会发现所有的变量声明的文件中,单或双引号,以及整数值工作(他们不一定需要用引号)或者甚至是数组。请注意,它只能在整个值在一行的地方工作 - 而且它对整个正则表达式来说非常愚蠢。但它应该适用于这种情况。

+0

这个作品完美! – 2013-03-07 16:42:19

+0

如何捕捉那些与Regex不匹配的行? – 2013-03-07 16:43:34

+0

你真的有这样的线吗?是否有一个特定的原因,你不能只包含文件并引用变量? – 2013-03-07 16:46:48

0
preg_match_all('/= \'(.+)\';/', '$LANG[\'help\'][\'attribute_label\'] = \'Label\';', $matches); 

print_r($matches); 


Array 
(
[0] => Array 
    (
     [0] => = 'Label'; 
    ) 

[1] => Array 
    (
     [0] => Label 
    ) 
)