2016-12-09 16 views
1

私はファイル内のパターンを探して、パターンが見つかると操作を実行しようとしています。パターンはclass <class_name> extendsです。しかし、パターン//class <class_name> extendsに遭遇した場合、つまりコメント行を取得したときに操作をスキップしたい場合は除外したいと考えています。特定のパターンを避けるためのperlスクリプト/正規表現

open my $fh, "<", $file_t or die "can't read open '$file_t': $OS_ERROR";  # Opening the file 
while (<$fh>) { 

    if(/class\s{1,10}<class_name>\s{1,10}extends/){ 
     #Perform the operation if we find above pattern 
    } 
close $fh or die "can't read close '$file_t': $OS_ERROR";      #Closing the file 
} 

私が言及したパターンを除外するためにコードを含めるにはどうすればよいですか。 助けてくれてありがとう。

***********編集は************

私は私の質問を再フレームにあると思います。私はまた、class <class_name> extendsを探すときにそのパターンだけを探すべきであり、そのパターンが存在していてもその前に//と一緒に存在するかどうかを確認したいと思います。何か他の文字の組み合わせがなく、その特定のパターンが存在するかどうかを判断します。

+0

にある、あなたの正規表現の式でこれを含めるしようとしていますか?そうでなければ、正規表現を持つ別の正規表現はうまく動作するはずです。 –

+0

@KRichardson:別の正規表現では '/'がターゲットの前後にあるかどうかは分かりません。 –

+0

@リチャードソン、私はしようとしている別の正規表現では、それを別々に解釈しているので '/ /'をどのように含めるかを理解することができません。 –

答えて

2

一つの解決策は唯一

/^\s*class\s+<class_name>\s+extends/ 

(クラスはインデントスコープ内で宣言することができた場合)定義の前に空白を許す説明

^ Start of line 
\s* 0 or more whitespace characters 
+0

「public」(または同様の)修飾子が1つの問題かもしれません –

+0

@Andy Rayはい、この解決方法も有効です。いいアイデアとありがとう。 @K Richardsonモディファイアではわかりません。 –

+0

キーワードが先行できる場合は、 '/^[\ w \ s] * \ bclass ... /' – ikegami

2

あなたが同じ正規表現の式(というよりもandと一緒に2を結ぶにチェックを入れる必要があるときは、否定先読み使用することができます

if (m{/^(?:(?!//).)*class\s{1,10}$className\s{1,10}extends}) { 
+0

はい、これは動作します。助けてくれてありがとう。 –

+1

なぜ '\ s {1,10}'スペース? '\ s +'を使わないのはなぜですか? –

+0

私はOPによって提供されたコードからそれを残しましたが、はい私は同意します。それに応じて回答を編集したい場合は、私は喜んでそれを受け入れます。 –

0

を私は上記の助けを借りて解決策を見つけたと思います。コメント私は私のコード内のコードの下の行に含ま: if(/^\s*\/\/class\s{1,10}<class_name>\s{1,10}extends/){next;}

をコードの新しい作品は、次のようになります。

open my $fh, "<", $file_t or die "can't read open '$file_t': $OS_ERROR";  # Opening the file 
while (<$fh>) { 
if(/^\s*\/\/class\s{1,10}<class_name>\s{1,10}extends/){next;} 
elsif(/class\s{1,10}<class_name>\s{1,10}extends/){ 
    #Perform the operation if we find above pattern 
} 
close $fh or die "can't read close '$file_t': $OS_ERROR";      #Closing the file 
} 

助けてくれてありがとう。

+0

それはそれを行う必要があります。私は将来的に「否定的な先読み」を使って助けになる方法を見つけました。 –

+0

はい、あなたのソリューションは鮮明で役立ちます。ありがとうございました。 –

関連する問題