PHP:用逗号(,)分割字符串但忽略方括号内的任何内容?
PHP: Split a string by comma(,) but ignoring anything inside square brackets?
如何按 ,
拆分字符串但跳过数组中的字符串
String - "'==', ['abc', 'xyz'], 1"
当我执行 explode(',', $expression)
时,它给了我数组中的 4 个项目
array:4 [
0 => "'=='"
1 => "['abc'"
2 => "'xyz']"
3 => 1
]
但我希望我的输出是 -
array:3 [
0 => "'=='"
1 => "['abc', 'xyz']"
2 => 1
]
对于示例数据,您可以使用 preg_split and use a regex to match a comma or match the part with the square brackets and then skip that using (*SKIP)(*FAIL)。
$pattern = '/,|\[[^]]+\](*SKIP)(*FAIL)/';
$string = "'==', ['abc', 'xyz'], 1";
$result = preg_split($pattern, $string);
print_r($result);
那会给你:
Array
(
[0] => '=='
[1] => ['abc', 'xyz']
[2] => 1
)
是的,正则表达式 - select 所有逗号,忽略方括号
/[,]+(?![^\[]*\])/g
对于您的示例,如果您不想使用正则表达式并想坚持使用您已经在使用的 explode()
函数,您可以简单地将 ', '
的所有实例替换为 ','
,然后用 ,
(后跟 space)而不是逗号将字符串分成几部分。
这使得括号内的内容没有爆炸分隔符,从而使它们不会分解成数组。
这还有一个问题,如果你有一个像 '==', 'test-taco'
这样的字符串,这个解决方案将不起作用。这个问题,连同许多其他问题,可以通过从单独的字符串中删除单引号来解决,因为 ==, test-taco
仍然有效。
如果方括号内的字符串有效,此解决方案应该有效 PHP arrays/JSON 字符串
$str = "'==', ['abc', 'xyz'], 1";
$str = str_replace("', '", "','", $str);
$str = explode(", ", $str);
虽然我推荐正则表达式,因为它可以解决一些我没有看到的潜在问题。
输出为:
Array
(
[0] => '=='
[1] => ['abc','xyz']
[2] => 1
)
如何按 ,
拆分字符串但跳过数组中的字符串
String - "'==', ['abc', 'xyz'], 1"
当我执行 explode(',', $expression)
时,它给了我数组中的 4 个项目
array:4 [
0 => "'=='"
1 => "['abc'"
2 => "'xyz']"
3 => 1
]
但我希望我的输出是 -
array:3 [
0 => "'=='"
1 => "['abc', 'xyz']"
2 => 1
]
对于示例数据,您可以使用 preg_split and use a regex to match a comma or match the part with the square brackets and then skip that using (*SKIP)(*FAIL)。
$pattern = '/,|\[[^]]+\](*SKIP)(*FAIL)/';
$string = "'==', ['abc', 'xyz'], 1";
$result = preg_split($pattern, $string);
print_r($result);
那会给你:
Array
(
[0] => '=='
[1] => ['abc', 'xyz']
[2] => 1
)
是的,正则表达式 - select 所有逗号,忽略方括号
/[,]+(?![^\[]*\])/g
对于您的示例,如果您不想使用正则表达式并想坚持使用您已经在使用的 explode()
函数,您可以简单地将 ', '
的所有实例替换为 ','
,然后用 ,
(后跟 space)而不是逗号将字符串分成几部分。
这使得括号内的内容没有爆炸分隔符,从而使它们不会分解成数组。
这还有一个问题,如果你有一个像 '==', 'test-taco'
这样的字符串,这个解决方案将不起作用。这个问题,连同许多其他问题,可以通过从单独的字符串中删除单引号来解决,因为 ==, test-taco
仍然有效。
如果方括号内的字符串有效,此解决方案应该有效 PHP arrays/JSON 字符串
$str = "'==', ['abc', 'xyz'], 1";
$str = str_replace("', '", "','", $str);
$str = explode(", ", $str);
虽然我推荐正则表达式,因为它可以解决一些我没有看到的潜在问题。
输出为:
Array
(
[0] => '=='
[1] => ['abc','xyz']
[2] => 1
)