Regex eclipse中匹配非注释模式

Regex eclipse中匹配非注释模式,regex,eclipse,perl,Regex,Eclipse,Perl,我在正则表达式语法方面遇到了问题 我希望匹配某个单词的所有匹配项,后跟一个数字,但不包括已注释的行 注释是(多个)或或## 示例: #This is a comment <- no match #This is a comment myword 8 <- no match my $var = 'myword 12'; <- match my $var2 = 'myword'; <- no match 我做错了什么 我想在Eclipse的文件搜索中使用它(使用Pe

我在正则表达式语法方面遇到了问题

我希望匹配某个单词的所有匹配项,后跟一个数字,但不包括已注释的行

注释是(多个)
##

示例:

#This is a comment  <- no match

#This is a comment myword 8 <- no match

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

my $var2 = 'myword'; <- no match
我做错了什么

我想在Eclipse的文件搜索中使用它(使用PerlEpic模块)


Edit:我得到的新模式不返回假匹配,但它返回多行,其中包括
myword
和该行前面的几行。我不确定它是否会返回所有匹配项。

请注意,
[]
是字符类。这里不能使用量词。它们类似于
–匹配其中给定的任何字符。然后可以量化点本身或a

在您的示例中,
[^(#+)]
将匹配除
+
,并且取决于味道(我猜)
\

因此,这里要匹配的是以除
以外的任何字符开头的行。(我想。)


一个问题是
#
可能出现在一个不是注释的字符串中。(关于不从行首开始的注释。)

注意
[]
是字符类。这里不能使用量词。它们类似于
–匹配其中给定的任何字符。然后可以量化点本身或a

在您的示例中,
[^(#+)]
将匹配除
+
,并且取决于味道(我猜)
\

因此,这里要匹配的是以除
以外的任何字符开头的行。(我想。)


一个问题是
#
可能出现在一个不是注释的字符串中。(关于不在行首开始的注释。)

Re:不在字符串开头的注释

要做到这一点,(例如,不要错过任何有效的匹配项),您几乎必须正确地解析文件特定编程语言的语法,因此您不能使用正则表达式(很容易,甚至根本不能)做到这一点

如果不这样做,则可能会丢失在注释开始以外的上下文中使用的“#”后面的有效搜索命中率-作为几乎所有语言的常见示例,在字符串
“this is my#hash”
之后


更糟糕的是,在Perl中,“#”也可以显示为正则表达式分隔符、
$#myArr
(数组最后一个元素的索引)或-joy of joys-作为标识符名称中的有效字符

Re:注释不在字符串开头

要做到这一点,(例如,不要错过任何有效的匹配项),您几乎必须正确地解析文件特定编程语言的语法,因此您不能使用正则表达式(很容易,甚至根本不能)做到这一点

如果不这样做,则可能会丢失在注释开始以外的上下文中使用的“#”后面的有效搜索命中率-作为几乎所有语言的常见示例,在字符串
“this is my#hash”
之后


更糟糕的是,在Perl中,“#”也可以显示为正则表达式分隔符、
$#myArr
(数组最后一个元素的索引)或-joy of joys-作为标识符名称中的有效字符

当然,如果您知道这些问题,并且仍然希望使用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

my$var='myword12' 当然,如果您知道这些问题,并且仍然希望使用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

my$var='myword12';您对
[]
的错误用法是正确的。我认为在我的例子中,在不是注释的字符串中没有使用#。即使有,我也可以忽略这些情况。你对
[]
的错误用法是正确的。我认为在我的例子中,在不是注释的字符串中没有使用#。即使有,我也可以忽略这些案例。正如我对Simon的回答所作的评论,我认为除了评论之外,
没有任何用处,即使是在这种情况下,我也可以忽略这些案例。我错过了一些正确的比赛并不坏,我只想消除大多数错误的(aka.comments)比赛。@Pit-这取决于你的目的。我90%以上的代码搜索都是这样的,错过一个有效匹配比10个误报要糟糕得多:)当我对Simon的答案发表评论时,我认为除了注释之外,没有任何
#
的用途,即使是这种情况,我也可以忽略这些情况。我错过了一些正确的比赛并不坏,我只想消除大多数错误的(aka.comments)比赛。@Pit-这取决于你的目的。我90%以上的代码搜索都是这样的,错过一个有效匹配比10个误报要糟糕得多:)这对我不起作用;复制图案时可能丢失了什么?前6个粗体字符可能表示这一点。我修正了上面的表达式。我在适用于Python的Kodos中进行的测试,虽然regexp也适用于perl,但也不适用。“[$;]+”应该做什么?仅当到达行的任意一端或命令结束时才匹配?这对我不起作用;复制图案时可能丢失了什么?前6个粗体字符可能表示这一点。我修正了上面的表达式。我在适用于Python的Kodos中进行的测试,虽然regexp也适用于perl,但也不适用。“[$;]+”应该做什么?仅当到达行的任意一端或命令结束时匹配?