RegEx的动态命名子模式?

时间:2013-01-05 17:54:41

标签: php preg-match

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

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

step=5
min=0
max=100

我想使用preg_match创建一个基本上为:

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

用户可以在文本条目中添加任意数量的字段;所以它需要根据输入动态生成数组条目。有一个简单的方法吗?

1 个答案:

答案 0 :(得分: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>';