我想不到什么好方法可以使用一个正则表达式就分割整个字符串。
如果允许两步就可以做到正确分割。<?php$str = "{aa='aa', b1='b1'},{a2='a2', b2='b2'},{a3='a3', b4='b4'}";$arr = split("},{", $str); // 这步的结果是数组中除了第一个开头带有 {,最后一个结尾带有 },其他都分割完毕。$arr[0] = ltrim($arr[0], "{"); // 去除数组第一个项目开头的 {$lastElementIndex = count($arr) - 1;
$arr[$lastElementIndex] = rtrim($arr[$lastElementIndex], "}"); // 去除数组最后一个项目结尾的 }print_r($arr);?>需要注意的是 split() 使用的 POSIX 正则表达式,表达式开头和结尾不应该带有 /。如果需要使用 PCRE 正则表达式,应使用 preg_split()。
如果允许两步就可以做到正确分割。<?php$str = "{aa='aa', b1='b1'},{a2='a2', b2='b2'},{a3='a3', b4='b4'}";$arr = split("},{", $str); // 这步的结果是数组中除了第一个开头带有 {,最后一个结尾带有 },其他都分割完毕。$arr[0] = ltrim($arr[0], "{"); // 去除数组第一个项目开头的 {$lastElementIndex = count($arr) - 1;
$arr[$lastElementIndex] = rtrim($arr[$lastElementIndex], "}"); // 去除数组最后一个项目结尾的 }print_r($arr);?>需要注意的是 split() 使用的 POSIX 正则表达式,表达式开头和结尾不应该带有 /。如果需要使用 PCRE 正则表达式,应使用 preg_split()。
<?phpecho '<pre>';
if(preg_match_all("/\{(.*?)\}/i", "{aa='aa', b1='b1'},{a2='a2', b2='b2'},{a3='a3', b4='b4'}", $matches)) {
//for ($i=0; $i< count($matches[0]); $i++) {
// echo $matches[1][$i]."\n";
//}
print_r($matches[1]);}
echo '</pre>';?>
还是多谢。