我知道我可以在preg_match中使用命名子模式来命名我的数组中的行:(?P<sval1>[\w-]+)
。我遇到的问题是“sval1”是预定义的。是否可以将此命名子模式作为正则表达式查找本身的一部分?
例如,如果文本字段如下:
step=5
min=0
max=100
我想使用preg_match创建一个基本上为:
的数组{
[step] => 5
[min] => 0
[max] => 100
}
用户可以在文本条目中添加任意数量的字段;所以它需要根据输入动态生成数组条目。有一个简单的方法吗?
答案 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>';