在纯bash / php中重命名具有多个特殊字符的文件

时间:2016-05-01 21:16:25

标签: php regex bash

有没有办法可以将“štupîd-(ƒ†le)-nÆmè.txt”等文件重命名为“tup-(le)-nm.txt”,以便在bash或php中删除所有不支持的字符? / p>

3 个答案:

答案 0 :(得分:0)

你必须使用一个字符类,并在字符类的开头定义除^所需内容之外的所有内容:

/[^\w-().]/

Online Demo

PHP代码:

$str = 'štupîd-(ƒ†le)-nÆmè.txt';
echo preg_replace("[^\w-().]","",$str);
//=>tupd-(le)-nm.txt

答案 1 :(得分:0)

使用php:

$str = 'štupîd-(ƒ†le)-nÆmè.txt';
echo preg_replace('~[^[:ascii:]]+~u', '', $str);

(因为你处理UTF-8编码的字符串,你需要使用u修饰符,否则正则表达式引擎将逐字节而不是逐个字符地读取你的字符串。这可能导致不必要的匹配)< / em>

echo iconv('UTF-8', 'ASCII//IGNORE', $str);

使用bash:

iconv -c -f UTF-8 -t ASCII <(echo 'štupîd-(ƒ†le)-nÆmè.txt')

答案 2 :(得分:-1)

在php中你可以使用preg_match

来完成
preg_replace('/[^A-Za-z0-9-.]/', '', $targetFileDirty);

上面的内容将取代所有内容,但字母,数字和点都没有。