我想在 PHP 中拆分一个包含带引号和不带引号的子字符串的字符串。
假设我有以下字符串:
"this is a string" cat dog "cow"
拆分后的数组应如下所示:
array (
[0] => "this is a string"
[1] => "cat"
[2] => "dog"
[3] => "cow"
)
我在使用正则表达式时有点挣扎,我想知道是否甚至可以通过一个正则表达式/preg_split-Call 来实现...
我尝试的第一件事是:
[[:blank:]]*(?=(?:[^"]*"[^"]*")*[^"]*$)[[:blank:]]*
但这仅正确拆分了 array[0] 和 array[3] - 其余部分根据每个字符进行拆分。
然后我找到了这个链接:
PHP preg_split with two delimiters unless a delimiter is within quotes
(?=(?:[^"]*"[^"]*")*[^"]*$)
在我看来,这是一个很好的起点。但是,我的示例中的结果与第一个正则表达式相同。
我尝试将两者结合起来——首先是引用字符串,然后是第二个子正则表达式,它应该省略引用字符串(因此是 [^"]):
(?=(?:[^"]*"[^"]*")*[^"]*$)|[[:blank:]]*([^"].*[^"])[[:blank:]]*
因此有2个问题:
- 甚至可以通过一个 regex/preg_split-Call 来实现我想要的吗?
- 如果是,我将不胜感激有关如何正确组装正则表达式的提示