我有一个来自API的文件名字符串,它们有两种分隔方式,一种是逗号,另一种是逗号然后是空格,但它们没有混合,例如请参阅以下内容
file name.png, filename2.png, filename3.png, filename4.png
或
filename.png,filename.png,file name.png,filename.png
到目前为止,我一直在使用以下代码创建一个文件名数组
$fileArray = preg_split( '/(\s|,|, )/', $fileList );
但是,我遇到了一个问题,如果我在文件名中有空格,它会把它砍掉。
有什么方法可以创建一个文件名数组,其中还包含文件名中的空格?
答案 0 :(得分:4)
我认为你真的不需要正则表达式:
$fileNames = explode(',', $fileList);
$fileArray = array_map('trim', $fileNames);
如果您稍后在代码中循环遍历数组,请跳过array_map
并修剪循环内的文件名。这将节省一次迭代。
答案 1 :(得分:2)
如果分隔符是:
您只需运行strpos()
检查并使用相应的分隔符进行爆炸。
包含2次测试运行的代码:(Demo)
$fileLists=[
'filename.png,file name2.png,filename3.png,filename4.png',
'filename5.png, filename6.png, file name7.png, filename8.png'
];
foreach($fileLists as $fileList){
var_export(explode(strpos($fileList,', ')!==false?", ":",",$fileList));
}
输出:
array (
0 => 'filename.png',
1 => 'file name2.png',
2 => 'filename3.png',
3 => 'filename4.png',
)array (
0 => 'filename5.png',
1 => 'filename6.png',
2 => 'file name7.png',
3 => 'filename8.png',
)
这意味着没有迭代函数调用来修改/清理每个元素。)
...老实说,如果这是我的项目,我会使用preg_split('/, ?/',$fileList)
,因为这是最短,最精致的文字方法。
答案 2 :(得分:1)
是。你想要的是将逗号分隔为有或没有空格:
preg_split('/,\\s*/', $list);
您可以支持不同的分隔符:
preg_split('/[;,]\\s*/', $list);
答案 3 :(得分:1)
要提供正则表达式解决方案,您可以使用?
将空格设为可选标记。
以下正则表达式仅适用于逗号,或逗号后跟空格,并允许非分隔字符串中的空格。
preg_split('/,\s?/', $string);
array(5) {
[0]=>
string(12) "filename.png"
[1]=>
string(12) "filename.png"
[2]=>
string(12) "filename.png"
[3]=>
string(12) "filename.png"
[4]=>
string(13) "file name.png"
}
array(5) {
[0]=>
string(12) "filename.png"
[1]=>
string(13) "filename2.png"
[2]=>
string(13) "filename3.png"
[3]=>
string(13) "filename4.png"
[4]=>
string(14) "file name5.png"
}