PHP正则表达式:按不在引号中的空格拆分
在php中,如何用不包含在双引号内的空格拆分字符串?例如,这:PHP正则表达式:按不在引号中的空格拆分,php,regex,Php,Regex,在php中,如何用不包含在双引号内的空格拆分字符串?例如,这: "hello my \"name is bob\"" 将变成这样: ["hello", "my", "\"name is bob\""] 可以基于正则表达式使用此函数: function splitNonQuoted($data) { preg_match_all('/\S*?(".*?"\S*?)*( |$)/', $data, $matches); array_pop($matches[0]); re
"hello my \"name is bob\""
将变成这样:
["hello", "my", "\"name is bob\""]
可以基于正则表达式使用此函数:
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""
}
您可以使用此参数:
/\s(?=([^“]*”[^“]*”*[^“]*”)/
字符串可以任意长,引号可以转义或不转义。
这:“你好,我的”名字是鲍勃“你好,我的”名字是约翰“结束”
或者这“你好,我的”名字是鲍勃“你好,我的”名字是约翰“结束”
是可能的
用法示例:
$array = preg_split('/\s(?=([^"]*"[^"]*")*[^"]*$)/', "hello my \"name is bob\" hello my \"name is john\" end");
你能通过解析字符串给出一个例子吗?也许这是有用的。这是本页上唯一对我有效的解决方案。谢谢。