应该使用什么正则表达式来避免perl中的文本之前的符号?

时间:2012-06-01 17:23:58

标签: regex perl

我有以下变量。如果变量有“imoport / canada / campingplaces / tobermory”而不是#或任何东西,我只想打印是。什么应该在正则表达式中插入这种东西。

  my $textfile = "# imoport/canada/campingplaces/tobermory
                    imoport/canada/campingplaces/tobermory
                  #imoport/canada/campingplaces/tobermory";
  my $textNeeded= "imoport/canada/campingplaces/tobermory"

这就是我正在使用的

  if ($textfile =~ m/$textNeeded/i) {
       print "yes working"

  }

注意: - 我从不同的文本文件中获取数据,因此某些文本文件可能只有“#imioport / canada / campingplaces / tobermory”。我想避免那些

3 个答案:

答案 0 :(得分:3)

尽管问题描述相当含糊,但我想我已经弄清楚了你的意思。您的意思是您可能会在文本中使用#注释掉,并且您希望避免匹配这些内容。

print "yes" if $textfile =~ /^\s*$textNeeded/im;

这将匹配$textfile内的任何字符串,其中包含换行符后跟可选的空格后跟字符串。 /m选项生成正则表达式多行,这意味着^$匹配较大字符串中换行符所代表的行结尾。

您可能希望警惕搜索字符串中的正则表达式元字符。例如,如果您的搜索字符串为foo[bar].txt,则这些括号将被解释为字符类。在这种情况下,您将使用

/^\s*\Q$textNeeded\E/im

代替。 \Q ... \E将使文本内部仅匹配文字字符。

答案 1 :(得分:1)

我认为如果您的目标字符串出现在该行的BEGINNING处,我认为您需要创建一个Anchor来表示您想要匹配。这使用了向上克拉符号:

if($ textfile = ~m / ^ $ textNeeded / i){        打印“是的工作”

}

如果在textNeeded字符串之前有空格或制表符,则不会报告匹配项。

答案 2 :(得分:0)

简单地返回没有前导散列的行,如下所示:

my $textfile = "# imoport/canada/campingplaces/tobermory
                    imoport/canada/campingplaces/tobermory
                  #imoport/canada/campingplaces/tobermory";

for (split /^/, $textfile) {
  print $_ if(m/^\s*[a-zA-Z].*/);
}

返回:

                imoport/canada/campingplaces/tobermory