0

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

  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"

  }

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

4

3 回答 3

3

尽管问题描述相当模糊,但我想我对你的意思感到困惑。您的意思是您可能有文本被注释掉的行#,并且您希望避免匹配这些行。

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

这将匹配$textfile其中包含换行符后跟可选空格后跟您的字符串的任何字符串。该/m选项使正则表达式多行,这意味着它^$由换行符表示的行结尾匹配更大的字符串。

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

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

反而。这\Q ... \E将使里面的文本只匹配文字字符。

于 2012-06-01T17:43:55.487 回答
1

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

if ($textfile =~ m/ ^ $textNeeded/i) { print "是的工作"

}

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

于 2012-06-01T17:30:10.963 回答
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
于 2012-06-01T17:52:55.190 回答