除非在两个字符串/字符之间出现分隔符,否则使用给定分隔符分解字符串

时间:2016-05-06 13:20:12

标签: php

假设我有一个字符串,如下所示(从MySQL数据库查询): 137 ,77 ,278:214 e{34:3,32:5,33:1},277:248 e{32:5,33:1,34:3}n{Got Dirt?},323 ,443

我想在每个给定的,处爆炸所述字符串,除非所述字符位于{}之间。如果要打印出每一行,正确的输出应该类似于以下内容:

137 
77 
278:214 e{34:3,32:5,33:1}
277:248 e{32:5,33:1,34:3}n{Got Dirt?}
323 
443

我如何才能最有效地完成这项工作?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用preg_split功能以及以下regex

(,)(?!(?:[^\{]*\}))

所以你的代码看起来像

$str = "137 ,77 ,278:214 e{34:3,32:5,33:1},277:248 e{32:5,33:1,34:3}n{Got Dirt?},323 ,443";
$result = preg_split("~(,)(?!(?:[^\{]*\}))~",$str);
print_r($result);

正则表达式说明:

  • (,)字面匹配字符,
  • (?!(?:[^\{]*\}))否定捕获组未捕获,(commas)内的{}(curly braces)

Demo