使用正则表达式将键值字符串提取到数组中

时间:2016-12-11 04:11:27

标签: php regex

我有一系列看起来像这样的元素:

$lang = array(
    [0] => lang.language = "Language";
    [1] => lang.update = "Update";
    [2] => lang.lblbasket = "Basket";
);

我试图将其转换为:

$lang = array(
    [language] => Language,
    [update] => Update,
    [lblbasket] => Basket
);

我已经成功地做到了这一点,但我希望有一种更好的方法,我知道我可以通过正则表达式实现它,但不太确定如何做到这一点

这就是我设法做到的方式

for($i=0; $i<count($dumpArray); $i++) {
    if (substr($dumpArray[$i], 0, 5 ) == 'lang.') {
        list($lang_label, $lang_value) = explode('=', $dumpArray[$i]);
        $language[substr(trim($lang_label), 5)] = trim(str_replace('"', '', $lang_value));
    }
}

虽然我应该添加一个额外的函数来从字符串的末尾删除半列。 我希望有人可以提供帮助。

谢谢, Alesandro

4 个答案:

答案 0 :(得分:1)

$arr = [
    'lang.language = "Language";',
    'lang.update = "Update";',
    'lang.lblbasket = "Basket";',
];

foreach ($arr as $v) {
    preg_match('/^.*?\.(.*?) = "(.*?)";$/', $v, $matches);
    $arr2[$matches[1]] = $matches[2];
}
print_r($arr2);

正则表达式的解释如下:https://regex101.com/r/sp9dpC/2

答案 1 :(得分:0)

如果使用捕获组,正则表达式解决方案将非常简单:

$lang = [];
$regex = '/^lang\.(\S+)\s*=\s*"([^"]*)";$/';
foreach ($dumparray as $str) {
    if (preg_match($regex, $str, $match) === 1) {
        $lang[match[1]] = match[2];
    }
}

答案 2 :(得分:0)

您可以更改以下行:

$language[substr(trim($lang_label), 5)] = trim(str_replace('"', '', $lang_value));

到此:

$lang_value = trim(str_replace('"', '', $lang_value);    
$language[trim($lang_label)] = substr($lang_value, 0, strlen($lang_value)-1);

$language[substr(trim($lang_label), 5)] = trim(str_replace(array('"', ';'), '', $lang_value));

答案 3 :(得分:-1)

只需使用explode并构建一个新数组

$lang = array(
    'lang.language' => "Language",
     'lang.update' => "Update",
     'lang.lblbasket' => "Basket",
);

foreach ($lang as $key =>$language)
{
    $split_lang = explode('.',$key);
        $final[$split_lang[1]] = $language ;
}
echo '<pre>';
print_r($final);

结果

Array
(
    [language] => Language

    [update] => Update

    [lblbasket] => Basket
)