2011-01-26 15 views
1

正規表現の構文に問題があります。eclipseで非コメントのパターンを一致させる

特定の単語の後に数字がすべて一致するようにしたいが、コメントされている行は除外する。^[^(\#+)](.*?)(myword \d+)(.*?)$
新しいパターン:^([^\#]*?)(myword\s+\d+)(.*?)$私は
のorignalパターンを持って今まで

#This is a comment <- no match 

#This is a comment myword 8 <- no match 

my $var = 'myword 12'; <- match 

my $var2 = 'myword'; <- no match 

コメントは...

例(複数)#または##または###です

これは、1つ以上の#で始まり、その後に何かが続く行と一致する必要があります。次に、単語番号の組み合わせを検索しています。

コメントが行の先頭から始まらない場合は、行の一部と一致するのが良いでしょう。

my $var3 = 'test';#myword 8 <- no match 

私は間違っていますか?

私はEclipseのファイル検索(Perlの叙事詩モジュールで)で使いたいです。

編集:私が得た新しいパターンはノーリターン偽一致しませんが、それは、その行の前myword数行が含まれて行を複数返します。そして、私はそれがすべての試合を返すかどうか分からない。

答えて

3

[]は文字クラスです。そこには数量詞を使用することはできません。彼らは.のようなもので、そこに与えられている任意の文字にマッチします。その後、ドットそのものまたはcharacter classを数値化することができます。あなたの例では

[^(#+)]は(私は推測)の風味に応じて()+、および以外#\すべてを一致します。

ここでは、#を除く任意の文字で始まる行に一致させることをお勧めします。

#は、コメントではない文字列に出現する可能性があるという問題があります。 (コメントは行の先頭から始まっていません)

+0

は理にかなって... 1 – DVK

+0

あなたは '' []の間違った使用法と正しいです。私のケースでは、コメントではなく**の文字列に#を使用しているとは思わない。そして、もしあれば、私はそれらの事件を無視することができます。 – Pit

2

Re:コメントは文字列の先頭ではありません。

これを行うには(たとえば、有効なマッチを見逃してはいけません)、ファイルの特定のプログラミング言語の文法を正しく解析する必要があります。そうすれば(簡単に、あるいはまったく)、 RegEx。

もしあなたがそうでなければ、文字列"this is my #hash"の後で、ほとんどすべての言語に共通の例として、コメント開始以外の文脈で使用される "#"に続く有効な検索ヒットを失う危険性があります。

"#"は正規表現の区切り文字として表示され、$#myArr(配列の最後の要素のインデックス)、または - 喜びの喜び - 識別名の有効な文字として表示されます。

+0

私はSimonの答えにコメントしたので、私はコメントのため以外の '# 'の使用はないと思っています。私はそれらの事例を無視することもできます。私はいくつかの**右の**試合を見逃しても大丈夫ではない、私はちょうどほとんどの**間違い**(別名。コメント)の試合を排除したい。 – Pit

+0

@Pit - あなたの目的によって異なります。そのような私のコード検索の90 +%、それは10の偽陽性を持っているよりも有効な試合を逃すことがさらに悪いです:) – DVK

0

もちろん、あなたはこれらの問題を認識しており、まだregexpを使ってコンテンツを抽出したいと思っています。このようなものは役に立ちます:

^[^\#].[^\n\#]+myword\s\d+.[$;]+ 

これは少し複雑ですが、私はそれがあなたのために働くことを願っています。 は私にとって、これは以下のように一致します。

my $var = 'myword 12'; <- match 
my $var = 'myword 17'; <- match 
my $var2 = 'myword'; <- no match 
my $var = 'myword 9'; #'myword 17'; <- partly match 
my $var = 'myword 8'; ##'myword 127'; <- partly match 
my $var = ;#'myword 17'; <- no match 
#my $var = 'myword 13'; <- no match 
##my $var2 = 'myword 14'; <- no match 
+0

これは私のためには動作しません。パターンをコピーするときに何かが失われた可能性はありますか? **太字**の最初の6文字はこれを示すことができます。 – Pit

+0

上記の式を修正しました。私がKodosで行ったテストは、Pythonに適していますが、regexpはperlでも動作するはずです。 –

+0

どちらも動作しません。 '[$;] +'はどうすればいいですか?いずれかの行末に達した場合、またはコマンドが終了した場合にのみ一致しますか? – Pit

関連する問題