2

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

$str = "Foo var1='Abook' var2='A book'";

我正在尝试将此字符串转换为将''引号内的单词视为单个语句的数组(即它们将忽略''引号内的空格)。所以我的数组看起来像

Array
(
   [0] => "Foo",
   [1] => "var1='Abook'",
   [3] => "var2='A book'"
)

请注意,数组是由引号外 的空格分隔字符串形成的'',但不是在引号内。

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

4

4 回答 4

1

这解决了我的问题-

$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);

原文链接在这里。显然我只需要正确的正则表达式。问题解决了!!!

于 2013-03-15T20:59:04.040 回答
1

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

<?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);
?>
于 2013-03-15T20:55:50.700 回答
0
$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'
)
于 2013-03-15T21:05:50.117 回答
0

这里你需要什么:

$array = explode(' ', $str);

更新

你可以试试这个:

preg_match_all('/\'([^\']+)\'/', $string, $matches);
$matches = $matches[1];

' '获取替换空格之间的所有文本 ,{SPACE} 以便您的字符串看起来像$str = "var1='A{SPACE}book'"然后您可以explode()通过空格来完成。

嗯?

于 2013-03-15T20:47:38.873 回答