首页 > 解决方案 > 如何使用 preg_match_all 使用正则表达式模式将字符串转换为数组

问题描述

如何将下面的挑战字符串分隔为具有正则表达式模式的数组?

例如:

$str = '{varA: "value, A", varB: "value:B", varC: "value C", varD: "value\"D\""}';

// remove both curved brackets
$trimStr = substr($str, 1, strlen($str)-1);
preg_match_all("/(.*?):\"(.*?)\",/sm", $trimStr, $m);  // would like the regex to ignore the ',' and double quote in the value string too

进入一个数组,其中

arr[0] = 'varA: "value, A"';
arr[1] = 'varB: "value:B"';
arr[2] = 'varC: "value C"';
arr[3] = 'varC: "value \"D\""';

标签: phpregexpreg-match-all

解决方案


在您的示例中,您似乎根本不需要使用正则表达式,只需删除大括号并将字符串分解为数组即可。由于您的元素已经用逗号分隔,因此只需使用正确的分隔符。

$arr = explode(', ', $str);

但是,如果您坚持使用正则表达式,这里有一个匹配您的元素的表达式:

var\w+\:\s\".+?(?=\,|})

推荐阅读