我需要explode()
这个
'194','??','Dot,is',“3”,“0”,'4','35',0,'ANIMAL','STUN,SLOW,CURSE,TERROR'
分成元素。
元素的内容可以是引号或撇号(但可能根本不引用)。
零宽度字符串也需要匹配。
正如您所看到的,我无法用逗号分解它,因为逗号包含在某些元素中。
元素之间缺少空格,元素本身可能包含空格。
结果应为:
元素0 = 194
元素1 = ??
元素2 =点,是
要素3 = 3
元素4 = 0
元素5 = 4
要素6 = 35
要素7 =
元素8 = 0
元素9 =动物
元素10 = STUN,SLOW,CURSE,TERROR
答案 0 :(得分:3)
使用str_replace()将'
转换为"
;然后使用str_getcsv()
$str = "'194', '??','Dot, is', \"3\",\"0\", '4', '35',, 0, 'ANIMAL','STUN,SLOW,CURSE,TERROR'";
$array = str_getcsv(
str_replace("'", '"', $str)
);
var_dump($array);
答案 1 :(得分:0)
这是1函数调用/正则表达式方式,没有捕获组,也没有字符串准备...
代码:(Demo)(Pattern Demo)
// Using HEREDOC syntax to avoid escaping quotes in $string and $pattern
$string=<<<EOD
'194', '??','Dot, is', "3","0", '4', '35',, 0, 'ANIMAL','STUN,SLOW,CURSE,TERROR'
EOD;
$pattern=<<<EOD
/(?:^|,)(?: *(?:'\K[^']*|"\K[^"]*|\K[^,]+|\K(?=,)))/
EOD;
var_export(preg_match_all($pattern,$string,$out)?$out[0]:'fail');
输出:
array (
0 => '194',
1 => '??',
2 => 'Dot, is',
3 => '3',
4 => '0',
5 => '4',
6 => '35',
7 => '',
8 => '0',
9 => 'ANIMAL',
10 => 'STUN,SLOW,CURSE,TERROR',
)
有4种类型的匹配项。我将按照我的模式替代品的顺序列出它们。
注意:\K
重置全字符串匹配 - 这允许省略捕获组并允许输出数组将所有匹配放在单个子数组[0]
中。