我在PHP中有一个像这样的字符串 -
$str = "Foo var1='Abook' var2='A book'";
我正在尝试将此字符串转换为将''
引号内的单词视为单个语句的数组(即它们将忽略''
引号内的空格)。
所以我的数组看起来像
Array
(
[0] => "Foo",
[1] => "var1='Abook'",
[3] => "var2='A book'"
)
请注意,数组是通过外部 ''
引号分隔字符串而形成的,但不在其中。
请你给我一些好的preg功能,以便我能做到这一点。
答案 0 :(得分: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);
?>
答案 1 :(得分: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);
原始链接Here。 显然我只需要正确的正则表达式。问题解决了!!!
答案 2 :(得分:0)
这里你需要的是:
$array = explode(' ', $str);
<强>更新强>
你可以试试这个:
preg_match_all('/\'([^\']+)\'/', $string, $matches);
$matches = $matches[1];
获取' '
替换空格之间的所有文字{SPACE}
所以你的字符串看起来像$str = "var1='A{SPACE}book'"
,那么你可以用空格做explode()
。
MMM?
答案 3 :(得分: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'
)