您的第一个正则表达式很好,但仅适用于c
变量,这是适用于所有三个变量的变体:
[ces]=([^;]+);
这将查找您的 c 、 e 和 s 变量。
在PHP中,您可以像这样执行它:
$string = 'c=VAR1; e=VAR2; s=VAR3;';
preg_match_all("/([ces])=([^;]+);/", $string, $out, PREG_PATTERN_ORDER);
$tot = count($out[1]);
for ($i=0;$i<$tot;$i++) {
echo $out[1][$i]; //will echo 'c' , 'e' , 's' respectively
echo $out[2][$i]; //will echo 'VAR1' , 'VAR2' , 'VAR3' respectively
}
更新:在评论中回答 OP 的问题
上面的循环用于动态分配找到的值,因此如果正则表达式找到 4 、 5 或 10 个变量,则 for 将循环所有这些值。但是,如果您确定您的字符串中只有 3 个变量,您可以一次性直接分配它们,如下所示:
$string = 'c=VAR1; e=VAR2; s=VAR3;';
preg_match_all("/([ces])=([^;]+);/", $string, $out, PREG_PATTERN_ORDER);
$$out[1][0] = $out[2][0]; // var $c is created with VAR1 value
$$out[1][1] = $out[2][1]; // var $e is created with VAR1 value
$$out[1][2] = $out[2][2]; // var $s is created with VAR1 value
echo $c; //will output VAR1
echo $e; //will output VAR2
echo $s; //will output VAR3
我在上面的代码中使用 PHP变量变量。