キーワード検索をする上で、正規表現を覚えておくとかなり便利です。例えばあるファイルについて
という場合に、正規表現は役立ちます。コメントが「//」であるとき、正規表現
^\s*\/\/.*$
は、「行頭からはじまって(^)、スペースもしくはタブが0個以上(\s*)あって、コメント(\/\/)があって、その後ろに0個以上の何かが行末まで(.*$)ある」、という意味になります。
また、上記コメント行を除いた状態で、「行中にコメントがある」ときのコメント部分だけにマッチする正規表現は
\s*\/\/.*$
となり、「スペースまたはタブが0個以上(\s*)あって、コメント(\/\/)があって、その後ろに0個以上の何かが行末まで(.*$)ある」という意味になります。
これを以下のテキスト(re.txt)
//abc //def //ghimodule abc; wire jkl; //hogeendmoduleに対して処理し、以下の文字列を取得するスクリプトを例示したいと思います。
module abc; wire jkl;endmodule--- tcsh
tcshではgrepを併用します。
#!/usr/bin/tcsh -fforeach line ( "`cat re.txt`" ) echo $line | \grep '^\s*\/\/.*$' >& /dev/null if ( $status == 1 ) then echo "$line" | sed 's/\s*\/\/.*$//' endifend--- Perl
#!/usr/bin/perluse warnings;open(IN, "re.txt");while(<IN>){ chomp; if(!/^\s*\/\/.*$/){ s/\s*\/\/.*$//; print "$_\n"; }}close(IN);--- Ruby
#!/usr/bin/ruby -wf = open("re.txt", "r")f.each do |line| if(/^\s*\/\/.*$/ !~ line)then line.sub!(/\s*\/\/.*$/, "") puts line endendf.close--- Python
#!/usr/bin/pythonimport ref = open("re.txt")for line in f: if not re.search(r'^\s*\/\/.*$', line): line = re.sub(r'\s*\/\/.*$', '', line) print line,