PHP正则表达式:由不在引号中的空格拆分

时间:2016-01-23 20:33:15

标签: php regex

如何通过未用双引号括起来的空格在php中拆分字符串?例如,这个:

"hello my \"name is bob\""

会变成这样:

["hello", "my", "\"name is bob\""]

3 个答案:

答案 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");