将字符串拆分为双引号和非双引号部分

时间:2016-10-10 19:13:53

标签: php arrays regex string


我目前正在开发一个带有搜索引擎的PHP项目,该项目要求我将搜索查询细分为一系列子字符串。
我想支持" doublequoting"以便用户能够搜索确切的结果,例如"超级秘密的东西"只有在其名称中包含完全字符串的结果,而没有引号的相同字符串返回" super"或者"秘密"或"东西"。
这些引用应该是可以逃脱的 我举个例子:

keyword Monday "Larrys \"House\"" epic

应返回

数组
[keyword, Monday, Larrys "House", epic]

如果这不太难实现,我也想支持转义反斜杠。 \\"仍然算作引用,而\\\"则没有,依此类推。

感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

没有必要使用正则表达式,因为php提供了非常好的CSV解析例程。使用str_getcsv

$input = 'keyword Monday "Larrys \"House\"" epic';

$arr = str_getcsv($input, " ");

// remove \\ from array
$arr = array_map(function($elem) { return str_replace ( '\\\\', '\\', str_replace ( '\\"', '"', $elem ) );}, $arr);


// print resulting array
print_r($arr);

Code Demo

<强>输出:

Array
(
    [0] => keyword
    [1] => Monday
    [2] => Larrys "House"
    [3] => epic
)