You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:40:48