例如,如果我需要过滤以下文字并搜索单词example
,但省略该行以哈希#
# filler text example
example
example 2
# test example 3
我尝试了几种不同的组合,但似乎无法做到这一点。
更新
我已尝试/^[^#].*example/g
和/^(?!#).*example.*/g
,但似乎没有得到任何结果
答案 0 :(得分:4)
尝试将过多的功能捆绑到单个正则表达式中是很奇怪的,而人们似乎不会与任何其他运算符做同样的事情。
写作
没有错if ( /example/ and not /^#/ ) {
print;
}
并且它比任何单个等效正则表达式更清晰
如果您愿意,可以将其更改为多个语句;
之类的东西while (<>) {
next if /^#/;
print if /example/;
}
或者您可以通过创建一个临时变量来允许注释从一行开始,该变量包含已删除哈希#
之后的所有字符的文本,而是处理
while (<>) {
my ($trimmed) = /^([^#]*)/;
print if $trimmed =~ /example/;
}
注意如果您希望使用此处理Perl代码,那么有些情况需要接受特殊处理,其中哈希不表示评论的开始,例如作为$#array
构造,或替代模式分隔符,如m#example#
答案 1 :(得分:0)
^((?!#).*example.*)$
可以更好地与您的regex101测试人员配合使用。也可以使用标记gm
而不是g
。测试人员将示例文本作为单个字符串处理,但如果您逐行处理文本,devnull的答案将起作用。