0

我知道我可以在 preg_match 中使用命名子模式来命名数组中的行:(?P<sval1>[\w-]+)。我遇到的问题是“sval1”是预定义的。是否可以将此命名子模式作为正则表达式查找本身的一部分?

例如,如果文本字段如下:

step=5
min=0
max=100

我想使用 preg_match 来创建一个数组,本质上是:

{
    [step] => 5
    [min] => 0
    [max] => 100
}

用户可以在文本条目中添加任意数量的字段;所以它需要根据输入动态生成数组条目。是否有捷径可寻?

4

1 回答 1

1
$str = 'step=5
min=0
max=100';

$output = array();
$array = explode("\n",$str);
foreach($array as $a){
    $output[substr($a,0,strpos($a,"="))] = substr($a,strpos($a,"=")+1);
}

echo '<pre>';
print_r($output);
echo '</pre>';

或者:

$str = 'step=5
min=0
max=100';

$output = array();
preg_match_all("/(.*)=(.*)/",$str,$matches);
if(isset($matches[1]) && isset($matches[2])){
    foreach($matches[1] as $k=>$m){
        $output[$m] = $matches[2][$k];
    }
}


echo '<pre>';
print_r($output);
echo '</pre>';

或基于评论:

$str = 'step=5
min=0
max=100';

$output = array();
preg_match_all("/(.*)=(.*)/",$str,$matches);
if(isset($matches[1],$matches[2])){
    $output = array_combine($matches[1],$matches[2]);
}


echo '<pre>';
print_r($output);
echo '</pre>';
于 2013-01-05T18:10:49.303 回答