如何通过未用双引号括起来的空格在php中拆分字符串?例如,这个:
"hello my \"name is bob\""
会变成这样:
["hello", "my", "\"name is bob\""]
答案 0 :(得分:1)
您可以根据正则表达式使用此功能:
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"
)
答案 1 :(得分:1)
以下是针对您的特定情况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""
}
答案 2 :(得分:1)
您可以使用此图片:/\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");