Php 如何将字符串拆分为“explode”;“块”;我定义的是什么?

Php 如何将字符串拆分为“explode”;“块”;我定义的是什么?,php,regex,Php,Regex,我希望使用正则表达式将字符串分解成块。我知道preg_split(),但我仍在为Regex方面的事情而挣扎(即使preg_split()在这里会有所帮助)。老实说,我甚至不知道我是否应该使用正则表达式 我的意思是,如果我有这样的字符串: ?word word2 word3 "word4 word5 word6" 'word7' word8 Array ( [0] => ?word [1] => word2 [2] => word3 [3] =&

我希望使用正则表达式将字符串分解成块。我知道preg_split(),但我仍在为Regex方面的事情而挣扎(即使preg_split()在这里会有所帮助)。老实说,我甚至不知道我是否应该使用正则表达式

我的意思是,如果我有这样的字符串:

?word word2 word3 "word4 word5 word6" 'word7' word8
Array
(
    [0] => ?word
    [1] => word2
    [2] => word3
    [3] => word4 word5 word6
    [4] => word7
    [5] => word8
)
我希望将结果拆分为如下数组:

?word word2 word3 "word4 word5 word6" 'word7' word8
Array
(
    [0] => ?word
    [1] => word2
    [2] => word3
    [3] => word4 word5 word6
    [4] => word7
    [5] => word8
)
基本上,一个块应该用空格隔开,但是你可以在一组字符周围加上任何形式的引号来组成一个块

我最初尝试用空格进行分解,然后连接以“或”开头的值,直到达到以“或”结尾的值。但我想一定有更好的办法


谢谢

该解决方案归功于马克·贝克^

使用str_getcsv()分隔字符串,如下所示:

$string = '?word word2 word3 "word4 word5 word6" word7';
$string = str_getcsv($string, ' ', '"', '\\');
产生:

Array
(
    [0] => ?word
    [1] => word2
    [2] => word3
    [3] => word4 word5 word6
    [4] => word7
)
使用
preg\u match\u all()
,将所有必需的值捕获到第一组数组中:


演示:

您可以尝试以下正则表达式和
preg\u match\u all()


$regex='/(?),使用空格作为分隔符参数,然后修剪任何单个quotes@bub对不起,我应该说得更清楚一些,我的错。我最初尝试用一个空格进行分解,然后连接以“或”开头的值,直到到达以“或”结尾的值“或”。但我想一定有更好的方法,搜索了大约20分钟后来到这里。@MarkBaker谢谢!我来试一试。转义序列呢?输入字符串中有转义序列吗?
str\u getcsv()
不允许使用多个分隔符,所以不能混合使用
”…”
“…”
在一个字符串中。因此不会捕获操作示例输入。@DmitryEgorov-这就是为什么我在建议中使用数组\u walk来修剪
字符的原因。谢谢!我本来打算只使用一个分隔符,但这是一个完美的解决方案。