如何使用 preg_match_all 使用正则表达式模式将字符串转换为数组
How to turn strings into arrays using regex pattern using 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\""';
在您的示例中,您似乎根本不需要使用正则表达式,只需删除大括号并将字符串分解为数组即可。由于您的元素已经用逗号分隔,只需使用正确的分隔符即可。
$arr = explode(', ', $str);
但是,如果您坚持使用正则表达式,这里有一个表达式可以匹配您的元素:
var\w+\:\s\".+?(?=\,|})
/(.*?):\"(.*?)\",/sm
=> /{?((.*?): ?"(.*?)")[,}]/
try regex
PHP代码:
$str = '{varA: "value A", varB: "value:B", varC: "value C", varD: "value"D""}';
$pattern = '/{?((.*?): ?"(.*?)")[,}]/';
$arr = [];
preg_match_all($pattern, $str, $matches);
foreach($matches[1] as $match){
$arr[] = $match;
}
print_r($arr);
您需要在 :
和 "
之间提供可选间距,并且您需要将定界符更改为 ,
或行尾。
(.*?):\h*\"(.*?)\"(?:,|$)
https://regex101.com/r/aAyrQA/1/
或:
\{?(.*?):\h*\"(.*?)\"(?:,|\}|$)
您可以删除 $trimStr = substr($str, 1, strlen($str)-1);
。
完整 PHP 示例:
preg_match_all('/\{?(.*?):\h*\"(.*?)\"(?:,|\}|$)/', '{varA: "value, A", varB: "value:B", varC: "value C", varD: "value\"D\""}', $matches);
foreach($matches[1] as $key => $match) {
$arr[] = $match . ' :"' . $matches[2][$key] . '"';
}
如何将下面的挑战字符串分隔成具有正则表达式模式的数组?
例如:
$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\""';
在您的示例中,您似乎根本不需要使用正则表达式,只需删除大括号并将字符串分解为数组即可。由于您的元素已经用逗号分隔,只需使用正确的分隔符即可。
$arr = explode(', ', $str);
但是,如果您坚持使用正则表达式,这里有一个表达式可以匹配您的元素:
var\w+\:\s\".+?(?=\,|})
/(.*?):\"(.*?)\",/sm
=> /{?((.*?): ?"(.*?)")[,}]/
try regex
PHP代码:
$str = '{varA: "value A", varB: "value:B", varC: "value C", varD: "value"D""}';
$pattern = '/{?((.*?): ?"(.*?)")[,}]/';
$arr = [];
preg_match_all($pattern, $str, $matches);
foreach($matches[1] as $match){
$arr[] = $match;
}
print_r($arr);
您需要在 :
和 "
之间提供可选间距,并且您需要将定界符更改为 ,
或行尾。
(.*?):\h*\"(.*?)\"(?:,|$)
https://regex101.com/r/aAyrQA/1/
或:
\{?(.*?):\h*\"(.*?)\"(?:,|\}|$)
您可以删除 $trimStr = substr($str, 1, strlen($str)-1);
。
完整 PHP 示例:
preg_match_all('/\{?(.*?):\h*\"(.*?)\"(?:,|\}|$)/', '{varA: "value, A", varB: "value:B", varC: "value C", varD: "value\"D\""}', $matches);
foreach($matches[1] as $key => $match) {
$arr[] = $match . ' :"' . $matches[2][$key] . '"';
}