PHP忽略字符串中的空格以形成数组

PHP忽略字符串中的空格以形成数组,php,preg-match,preg-match-all,Php,Preg Match,Preg Match All,我在PHP中有这样一个字符串- $str = "Foo var1='Abook' var2='A book'"; 我正在尝试将此字符串转换为数组,该数组将'引号内的单词视为单个语句(即它们将忽略'引号内的空格)。 所以我的数组看起来像 Array ( [0] => "Foo", [1] => "var1='Abook'", [3] => "var2='A book'" ) 请注意,数组是由字符串外部的空格分隔而成的,而不是内部的空格 你能给我一些好的pre

我在PHP中有这样一个字符串-

$str = "Foo var1='Abook' var2='A book'";
我正在尝试将此字符串转换为数组,该数组将
'
引号内的单词视为单个语句(即它们将忽略
'
引号内的空格)。 所以我的数组看起来像

Array
(
   [0] => "Foo",
   [1] => "var1='Abook'",
   [3] => "var2='A book'"
)
请注意,数组是由字符串外部的空格分隔而成的,而不是内部的空格

你能给我一些好的preg函数,这样我就可以完成这个任务。

这里是你需要的:

$array=explode(“”,$str)

更新

您可以尝试以下方法:

preg_match_all('/\'([^\']+)\'/', $string, $matches);
$matches = $matches[1];
获取
'
之间的所有文本,将空格替换为
{SPACE}
因此,您的字符串看起来像
$str=“var1='A{SPACE}book'
,然后您可以按空格进行
分解()


mmm?

这将适用于您的示例输入和输出,但对您来说可能不够通用。这至少是一个起点:

<?php
  $str = "Foo var1='Abook' var2='A book'";
  $res = array();

  $bits = explode(' ', $str, 2);

  $res[] = $bits[0];

  if (preg_match_all("/\w+='[^']+'/", $bits[1], $matches) !== false) {
    $res = array_merge($res, $matches[0]);
  }

  print_r($res);
?>

这解决了我的问题-

$str= 'word1 word2 \'this is a phrase\' word3 word4 "this is a second phrase" word5 word1 word2 "this is a phrase" word3 word4 "this is a second phrase" word5';

$regexp = '/\G(?:"[^"]*"|\'[^\']*\'|[^"\'\s]+)*\K\s+/';

$arr = preg_split($regexp, $str);

print_r($arr);
原始链接。 显然,我只需要正确的regexp。问题解决了

$s=“Foo var1='Abook'var2='A book'”;
$s = "Foo var1='Abook' var2='A book'";
preg_match_all("~(?:(?<=^| )[^']+(?= |$)|(?<=^| )[^']+'[^']+'(?= |$))~", $s, $m);
print_r($m[0]);

Outputs:
Array
(
  [0] => Foo
  [1] => var1='Abook'
  [2] => var2='A book'
)

预匹配所有(“~(?):(?你检查过了吗?我已经试过分解,但它不会跳过引号中的空格。
'
。我正在尝试实现
preg\u match\u all
@TJFogarty按空格分解将分隔“一本书”,创建
var2='A
book'
我是个白痴。抱歉:这可能会对你有所帮助。请注意在它做了双引号和单引号:这将把“一本书”一分为二。我明白了。有趣的问题。