如何使用PHP正则表达式清理含图片文件名的脏CSV字符串?
当然可以用正则表达式高效解决这个问题,以下是针对需求的PHP实现方案:
分步处理代码(清晰易读)
$dirtyStr = ' @ *lorem.jpg,,, ip sum.jpg,dolor ..jpg,-/ ?'; // 1. 移除字符串两端所有非字母数字字符 $str = preg_replace('/^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$/', '', $dirtyStr); // 2. 移除字符串内部除逗号、点号外的所有非字母数字字符 $str = preg_replace('/[^a-zA-Z0-9,.]+/', '', $str); // 3. 将重复的逗号或点号替换为单个字符 $str = preg_replace('/([,.])\1+/', '$1', $str); echo $str; // 输出:lorem.jpg,ipsum.jpg,dolor.jpg
正则规则说明
- 第一步正则
^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$:^匹配字符串开头,[^a-zA-Z0-9]+匹配连续非字母数字字符;|表示逻辑或,[^a-zA-Z0-9]+$匹配字符串结尾的连续非字母数字字符,替换为空实现自定义trim效果。 - 第二步正则
[^a-zA-Z0-9,.]+:匹配所有不属于字母数字、逗号、点号的字符,直接替换为空完成清理。 - 第三步正则
([,.])\1+:([,.])捕获逗号或点号作为分组,\1+匹配该分组的重复出现,替换为分组本身$1,实现重复符号去重。
合并为单次替换(更简洁)
也可以把三个正则规则合并到一次preg_replace调用中:
$dirtyStr = ' @ *lorem.jpg,,, ip sum.jpg,dolor ..jpg,-/ ?'; $str = preg_replace( [ '/^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$/', '/[^a-zA-Z0-9,.]+/', '/([,.])\1+/' ], [ '', '', '$1' ], $dirtyStr ); echo $str; // 同样输出目标结果
内容的提问来源于stack exchange,提问作者provance
相关产品推荐
相关产品推荐

