Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于使用';重命名多个文件的regexp;重命名为.pl';_Regex_Linux_Perl_Rename - Fatal编程技术网

用于使用';重命名多个文件的regexp;重命名为.pl';

用于使用';重命名多个文件的regexp;重命名为.pl';,regex,linux,perl,rename,Regex,Linux,Perl,Rename,我正在使用重命名多个文件。我很难找到正确的regexp。我的文件名的格式如下: nn.some.title.string.ext 我只想把第一个“.”改为“-”。我原以为这样行得通,但事实并非如此 s/\.?/ - / 有人能帮我解决这个问题吗?TIA.对于简单的正则表达式模式,只需尝试一下 my $str = "nn.some.title.string.ext"; $str=~s/^([^\.]*)\./$1-/i; or $str=~s/\./-/; #^([^\.]*)

我正在使用重命名多个文件。我很难找到正确的regexp。我的文件名的格式如下:

nn.some.title.string.ext

我只想把第一个“.”改为“-”。我原以为这样行得通,但事实并非如此

s/\.?/ - /

有人能帮我解决这个问题吗?TIA.

对于简单的正则表达式模式,只需尝试一下

my $str = "nn.some.title.string.ext";

$str=~s/^([^\.]*)\./$1-/i;
or
$str=~s/\./-/;

#^([^\.]*)       Starting point upto the first dot

print $str;

也许你会想确保第一点不是最后一点。我的意思是,如果您有nn_some_title_string.ext文件名,脚本将不会更改最后一个点

$fileName = "nn.some.title.string.ext";

$fileName =~s/\.(?=\w+\.\w+)/-/;

print "FileName: " . $fileName ."\n";

\.?
可以匹配零字符序列,因此
s/\.?/-/
将替换输入开头的点或空字符串

"abc.def.ghi" ⇒  " - abc.def.ghi"
".abc"        ⇒  " - abc"

要更换第一个
,可以使用以下方法:

s/\./ - /
s/(?!^)\.(?!\w+\z)/ - /g


要替换所有的
,但要替换前导的或扩展中的,可以使用以下命令:

s/\./ - /
s/(?!^)\.(?!\w+\z)/ - /g

为什么要使用
量词?它使模式成为可选的。移除它
s/\./-/
应该可以用。
s/([^\.]*)\./$1-/
试试看。
s/\./-/
没有预期的效果?@WtRiker:你为什么需要团队和反向引用?如果您不使用
/g
修饰符,您只能在输入中找到一个匹配项。请不要使用该程序。它是业余代码,使用
eval
不适当且不必要。我想你需要
/I
修饰符,以防遇到小写句号?哈哈哈。。。我只是从上一行复制了正则表达式。谢谢