我试图找到所有出现的代码,除非该代码前面有注释。
这是我想要找到的一个例子:
$page_content .= '<meta http-equiv="refresh"
或
$page_content .= 'Some other text here</p><meta http-equiv="refresh"
有或没有前面的空格。 这就是我想要忽略的内容
//$page_content .= '<meta http-equiv="refresh"
再次使用或不使用前面的空格。
这样我可以确定我的代码库从不包含此代码,除非它在评论中或设置自动警报,如果找到它而没有得到错误警报,当它被注释掉时(忽略多行)现在评论。)
我尝试过使用后面的
(?<!\/\/).*<meta http-equiv="refresh"
但我没有太多运气,因为这仍然匹配每次出现,评论与否。
还有一件事:如果它在一个正则表达式而不是代码循环中会很棒,这样我就可以在Notepad ++或其他支持reg exp搜索的编辑器中进行搜索。 (令人惊讶的是,一个问题的阅读/理解有多么不同。我认为我很清楚,但从各种完全有效的答案中可以清楚地知道我可以包含更多细节: - )< / p>
答案 0 :(得分:0)
在检查字符串
之前删除注释while ( <$fh> ) {
s|//.*||;
if ( /<meta http-equiv="refresh"/ ) {
...;
}
}
答案 1 :(得分:-1)
对于有问题的输入:
//$page_content .= '<meta http-equiv="refresh"
这将做的事情:
use strict;
use warnings;
open my $fh, "<", "my_path\\data.txt";
while ( my $line = <$fh>) {
if ( $line =~ /^(?!\/\/).*?<meta http-equiv=\"refresh\"/){
print $line;
}
}
如果您有更多空格或其他缩进运算符,请使用look-behind运算符: 使用严格;
use warnings;
open my $fh, "<", "c:\\users\\uidp7702\\desktop\\data.txt";
while ( my $line = <$fh>) {
if ( $line =~ /(?<!\/\/)\$page_content\s.=\s\'.*?<meta http-equiv=\"refresh\"/){
print $line;
}
}