Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式:按不在引号中的空格拆分_Php_Regex - Fatal编程技术网

PHP正则表达式:按不在引号中的空格拆分

PHP正则表达式:按不在引号中的空格拆分,php,regex,Php,Regex,在php中,如何用不包含在双引号内的空格拆分字符串?例如,这: "hello my \"name is bob\"" 将变成这样: ["hello", "my", "\"name is bob\""] 可以基于正则表达式使用此函数: function splitNonQuoted($data) { preg_match_all('/\S*?(".*?"\S*?)*( |$)/', $data, $matches); array_pop($matches[0]); re

在php中,如何用不包含在双引号内的空格拆分字符串?例如,这:

"hello my \"name is bob\""
将变成这样:

["hello", "my", "\"name is bob\""]

可以基于正则表达式使用此函数:

function splitNonQuoted($data) {
    preg_match_all('/\S*?(".*?"\S*?)*( |$)/', $data, $matches);
    array_pop($matches[0]);
    return $matches[0];
}
示例用法:

print_r (splitNonQuoted("hello my \"name is bob\""));
输出:

Array
(
    [0] => hello 
    [1] => my 
    [2] => "name is bob"
)

以下是针对您的特殊情况的
preg_split
解决方案:

$words = preg_split('/(?!\\"\w+?)\s+(?!\w+\s*?\w*\\"\Z)/', "hello my \"name is bob\"");
var_dump($words);

// output:
array(3) {
  [0]=>
  string(5) "hello"
  [1]=>
  string(2) "my"
  [2]=>
  string(13) ""name is bob""
}

您可以使用此参数:
/\s(?=([^“]*”[^“]*”*[^“]*”)/
字符串可以任意长,引号可以转义或不转义。 这:
“你好,我的”名字是鲍勃“你好,我的”名字是约翰“结束”
或者这
“你好,我的”名字是鲍勃“你好,我的”名字是约翰“结束”
是可能的

用法示例:

$array = preg_split('/\s(?=([^"]*"[^"]*")*[^"]*$)/', "hello my \"name is bob\" hello my \"name is john\" end");

你能通过解析字符串给出一个例子吗?也许这是有用的。这是本页上唯一对我有效的解决方案。谢谢。