[英]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.