【问题标题】:split a string on semicolons taking into account strings and escaped quotes or semicolons考虑字符串和转义的引号或分号,在分号上拆分字符串
【发布时间】:2013-02-17 08:30:59
【问题描述】:

我仍在尝试找出一种方法来考虑转义引号,例如 "test\";nosplit"'test\';nosplit'

到目前为止,我有这样的事情:

preg_split('#(^;)|(;$)|(?<!["\'\\]);#', $str_to_split);

但它甚至无法处理以下简单的事情:test; 1; 2; '34;34'; wtvr

我希望它在这些上分开:

    v  v  v        v
test; 1; 2; '34;34'; wtvr

    v  v v            v
test; 1;2; '34\'34;34'; wtvr 

    v  v v            v
test; 1;2; "34\"34;34"; wtvr

    v  v v            v
test; 1;2; '34\"34;34'; wtvr 

    v  v v            v
test; 1;2; "34\'34;34"; wtvr

    v  v v                    v
test; 1;2; "3 4 \' 3  4 ; 3 4"; wtvr

我怎样才能做到这一点?

【问题讨论】:

  • 不确定这是否是“作弊”,但我会先保护引号中的分号,然后正常拆分,最后再放回去。
  • @Floris 您如何找到仅在引号中的分号?
  • '[^\]\'.*;.*[^\]\'' 应该这样做吗?
  • @Floris 你忘了test; 1;2; '34\\'34;34'; wtvrtest; 1;2; '34\\\'34;34'; wtvr
  • 是的,我确实忘记了那个案子......

标签: php regex preg-match-all preg-split


【解决方案1】:

为什么不使用str_getcsv

var_dump(str_getcsv("test; 1; 2; '34;34'; wtvr",";","'"));

http://ideone.com/JoFkr7#

【讨论】:

  • 这仅适用于所有字符串都是单引号的情况,但我也希望能够使用双引号。
  • 嗯...好吧,但您似乎正在重新发明 CSV,但规则不同。 :)
猜你喜欢
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2017-01-05
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多