2011-01-05 20 views
-1

我有以下命名約定文件:如何寫Perl的正則表達式在C標準文件名/ C++

  • * .C的C源文件。例如abc_test.c
  • * .cc對於C++源文件。例如abc_test.cc
  • * .h用於c頭文件。例如abc_test.h
  • * .hh用於C++頭文件。例如abc_test.hh

我怎麼能寫在Perl的正則表達式來表示這些格式的文件名?

回答

0

我能想象的簡單是\.c$,\.cc$,\.h$\.hh$。一個簡單的腳本可以是:

#!/usr/bin/env perl 
if ($ARGV[0] =~ /\.c$/) { print $ARGV[0] . "\n"; } 

使用在線正則表達式測試產品之一,例如, http://www.regextester.com/

+0

- 用於PERL。 http://perldoc.perl.org/perlfaq1.html#What%27s-the-difference-between-%22perl%22-and-%22Perl%22? – Hugmeir 2011-01-05 12:59:58

+0

永遠不要寫「PERL」,因爲儘管perl不是首字母縮略詞,還是apocryphal民間傳說和事後擴張。 – 2011-01-05 13:40:34

+1

@Hugmeir,你可以通過使用http://search.cpan.org/perldoc?Inline::PERL – daotoad 2011-01-06 01:39:49

-1

你可以試試File::Basename - 解析文件路徑爲目錄,文件名和後綴,0​​像

use File::Basename; 
    my $from_file = 'abc_test.hh'; 
    (my $base,my $dir,my $ext) = fileparse($from_file,qr{\.(?:cc?|hh?)$}); 
    print $ext; 
+0

我不認爲'qr {c,cc,h,hh}'會做你認爲它會做的事情,你可能需要'qw {c cc h hh}'。 – 2011-01-05 18:58:20

2

而不是使用正則表達式,提取延伸,做你的支票反對。

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

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

+1

不是'qr {c,cc,h,hh}'應該是一個正則表達式,ala'qr {\。(?: cc?| hh?)$}'?或者我錯過了什麼? – Hugmeir 2011-01-05 13:06:18

+0

@Hugmeir嗯,你是對的。修正了並且還添加了一個建議來匹配任何擴展名。 – marcog 2011-01-05 13:14:51