【发布时间】:2016-01-23 20:33:15
【问题描述】:
如何将 php 中的字符串用不包含在双引号内的空格分割?例如,这个:
"hello my \"name is bob\""
会变成这样:
["hello", "my", "\"name is bob\""]
【问题讨论】:
-
你能举个例子吗
-
通过解析字符串。
如何将 php 中的字符串用不包含在双引号内的空格分割?例如,这个:
"hello my \"name is bob\""
会变成这样:
["hello", "my", "\"name is bob\""]
【问题讨论】:
你可以使用这个pettern:/\s(?=([^"]*"[^"]*")*[^"]*$)/
字符串可以任意长,引号可以转义或不转义。
这个:"hello my \"name is bob\" hello my \"name is john\" end" 或者这个'hello my "name is bob" hello my "name is john" end' 是可能的。
使用示例:
$array = preg_split('/\s(?=([^"]*"[^"]*")*[^"]*$)/', "hello my \"name is bob\" hello my \"name is john\" end");
【讨论】:
您可以基于正则表达式使用此函数:
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""
}
【讨论】: