将字符串智能拆分为数组

时间:2012-12-05 04:20:26

标签: php regex arrays string preg-split

此代码将字符串拆分为包含test和string的数组:

$str = 'test string';
$arr = preg_split('/\s+/', $str);

但我也想检测引号并在分割时忽略它们之间的文本,例如:

$str = 'test "Two words"';

这也应该返回一个包含两个元素testTwo words的数组。

另一种形式,如果可能的话:

$str = 'test=Two Words';

因此,如果在任何空格之前存在等号,则该字符串应按=分割,否则应适用上述其他规则。

那我怎么能用preg_split来做呢?

2 个答案:

答案 0 :(得分:1)

尝试str_getcsv

print_r(str_getcsv('test string'," "));
print_r(str_getcsv('test "Two words"'," "));
print_r(str_getcsv('test=Two Words',"="));

输出

Array
(
    [0] => test
    [1] => string
)
Array
(
    [0] => test
    [1] => Two words
)
Array
(
    [0] => test
    [1] => Two Words
)

您可以使用preg_match之类的内容来检查空格前是否存在等号,然后确定要使用的分隔符。

仅适用于PHP> = 5.3。

答案 1 :(得分:1)

我确信这可以通过正则表达式完成,但是如何使用explode将字符串除以引号,然后按空格分隔?

给定字符串'I am a string "with an embedded" string',您可以先用引号分割,然后给出['I am a string', 'with an embedded', 'string'],然后遍历数组中的每个其他元素并按空格分割,从而产生['I', 'am', 'a', 'string', 'with an embedded', 'string']

执行此操作的确切代码您可以自己写。如果没有,请告诉我,我会帮助你。

在上一个例子中,只需用等号分隔:

$str = 'test=Two Words';
print explode('=', $str);