1

此代码会将字符串拆分为包含测试和字符串的数组:

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

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

$str = 'test "Two words"';

这也应该返回一个包含两个元素的数组,test并且Two words.

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

$str = 'test=Two Words';

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

那么我怎么能用 preg_split 做到这一点呢?

4

2 回答 2

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。

于 2012-12-05T04:32:31.430 回答
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);
于 2012-12-05T04:35:23.643 回答