Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Regex 如何为C/C+中的标准文件名编写perl正则表达式+;_Regex_Perl_File Extension - Fatal编程技术网

Regex 如何为C/C+中的标准文件名编写perl正则表达式+;

Regex 如何为C/C+中的标准文件名编写perl正则表达式+;,regex,perl,file-extension,Regex,Perl,File Extension,我有以下命名约定的文件: *.c用于c源文件。例如abc_测试.c 对于C++源文件,LI> *>强> cc。例如abc_测试.cc *.h用于c头文件。egabc_测试.h 对于C++头文件,LI> *>强> Hh < /强>。例如abc_测试.hh 如何用perl编写正则表达式来表示这些格式的文件名?我可以想象的简单例子是\.c$,\.cc$,\.h$和\.hh$。一个简单的脚本可以是: #!/usr/bin/env perl if ($ARGV[0] =~ /\.c$/) { prin

我有以下命名约定的文件:

  • *.c用于c源文件。例如abc_测试.c
  • 对于C++源文件,LI> *>强> cc。例如abc_测试.cc
  • *.h用于c头文件。egabc_测试.h
  • 对于C++头文件,LI> *>强> Hh < /强>。例如abc_测试.hh

如何用perl编写正则表达式来表示这些格式的文件名?

我可以想象的简单例子是
\.c$
\.cc$
\.h$
\.hh$
。一个简单的脚本可以是:

#!/usr/bin/env perl
if ($ARGV[0] =~ /\.c$/) { print $ARGV[0] . "\n"; }
使用一个在线正则表达式测试选项,例如,

您可以尝试-将文件路径解析为目录、文件名和后缀, 像


与其使用正则表达式,不如提取扩展并对其进行检查

use File::Basename;
my(undef, undef, $ext) = fileparse($file, qr{\.(?:cc?|hh?)$});
print $ext;

使用
qr{\..+?}
匹配任何扩展名。

--对于PERL?永远不要写“PERL”,因为PERL不是一个缩略语,不是虚构的民间传说,也不是事后的扩展。@Hugmeir,你可以使用@daotoad:My goods.在PERL程序中使用PERL的强大功能。。我太近视了!多亏了PERL——一种几乎灭绝的垃圾语言,我现在可以看到永远了!是不是
qr{c,cc,h,hh}
应该是一个正则表达式,ala
qr{\.(?:cc?| hh?$}
?还是我遗漏了什么?@Hugmeir嗯,你说得对。修复并添加了一个匹配任何扩展的建议。我不认为
qr{c,cc,h,hh}
会做你认为它会做的事情,你可能想要
qw{c cc h}
use File::Basename;
my(undef, undef, $ext) = fileparse($file, qr{\.(?:cc?|hh?)$});
print $ext;