【问题标题】:Explode string with given delimiter unless said delimiter appears between two strings/characters用给定的分隔符分解字符串,除非所述分隔符出现在两个字符串/字符之间
【发布时间】:2016-05-06 13:20:12
【问题描述】:

假设我有如下字符串(来自 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

我将如何最有效地做到这一点?

谢谢!

【问题讨论】:

  • 我必须建议使用像@Uchiha 这样的正则表达式。

标签: php


【解决方案1】:

您可以将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

【讨论】:

  • 你,我的好先生,太棒了。我不太确定为什么我事先没有考虑使用正则表达式。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-04-05
  • 2022-01-07
  • 2012-04-27
  • 2018-11-25
  • 2018-01-06
  • 2023-02-25
  • 2014-12-08
  • 1970-01-01
相关资源
最近更新 更多