簡體   English   中英

匹配日食中的非注釋模式

[英]Matching non commented pattern in eclipse

我在使用正則表達式語法時遇到麻煩。

我想匹配某個單詞后跟數字的所有匹配項,但要排除注釋行。

注釋是(多個) ###### ...

例子:

#This is a comment  <- no match

#This is a comment myword 8 <- no match

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

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

到現在為止
原始模式: ^[^(\\#+)](.*?)(myword \\d+)(.*?)$
新模式: ^([^\\#]*?)(myword\\s+\\d+)(.*?)$

哪個應該匹配不以一個或多個#開頭的行,然后是某些東西,然后是我要搜索的單詞數字組合,最后是某些東西。

如果注釋不是在行的開頭開始,那么也可以匹配行的某些部分,這可能會很好。

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

我究竟做錯了什么?

我想在Eclipse的文件搜索(使用Perl epic模塊)中使用它。

編輯:我得到的新模式不返回錯誤匹配,但返回包含myword多行該行之前的幾行。 而且我不確定它是否返回所有匹配項。

注意[]是字符類。 您不能在其中使用量詞。 他們就像. –匹配那里給定的任何字符。 然后可以對點本身或字符類進行量化。

在您的示例中, [^(#+)]將匹配()+以外的所有內容,並取決於#\\的風格

因此,您要在此處匹配以#以外的任何字符開頭的行。 (我認為。)

問題是#可能出現在不是注釋的字符串中。 (關於注釋不是從該行的開頭開始。)

回復:注釋不在字符串的開頭。

正確執行此操作(例如,不要錯過任何有效的匹配項),您幾乎必須正確地解析文件的特定編程語言的語法,因此您無法(正好,甚至根本無法)使用RegEx進行此操作。

如果不這樣做,則冒着丟失在注釋開始以外的上下文中使用“#”的有效搜索命中的風險-作為一個幾乎所有語言通用的示例,在字符串"this is my #hash"

在Perl中,甚至更糟的是,“#”還可以顯示為正則表達式定界符,也可以顯示為$#myArr (數組最后一個元素的索引),或者-欣喜的是-標識名稱中的有效字符!

當然,如果您知道這些問題,並且仍然想使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM