此代码将字符串拆分为包含test和string的数组:
$str = 'test string';
$arr = preg_split('/\s+/', $str);
但我也想检测引号并在分割时忽略它们之间的文本,例如:
$str = 'test "Two words"';
这也应该返回一个包含两个元素test
和Two words
的数组。
另一种形式,如果可能的话:
$str = 'test=Two Words';
因此,如果在任何空格之前存在等号,则该字符串应按=
分割,否则应适用上述其他规则。
那我怎么能用preg_split来做呢?
答案 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);