【发布时间】:2014-03-19 21:30:18
【问题描述】:
我正在阅读另一个 perl 文件,并试图在文件中找到所有被引号包围的字符串,单行或多行。我已经很好地匹配了所有单行,但是当我只想要字符串本身时,我无法在不打印整行的情况下匹配多行。例如,这是我正在阅读的内容的 sn-p:
#!/usr/bin/env perl
use warnings;
use strict;
# assign variable
my $string = 'Hello World!';
my $string4 = "chmod";
my $string3 = "This is a fun
multiple line string, please match";
所以我想要的输出是
'Hello World!';
"chmod";
"This is a fun multiple line string, please match";
但我得到了:
'Hello World!';
my $string4 = "chmod";
my $string3 = "This is a fun
multiple line string, please match";
这是我用来查找字符串的代码 - 所有文件内容都存储在 @contents 中:
my @strings_found = ();
my $line;
for(@contents) {
$line .= $_;
}
if($line =~ /(['"](.?)*["'])/s) {
push @strings_found,$1;
}
print @strings_found;
我猜我只会得到“Hello World!”;正确,因为我使用的是 $1 但我不确定如何在不逐行循环的情况下找到其他人,我认为这会很难找到多行字符串,因为它不知道下一行是什么。
我知道我的正则表达式是相当基本的并且没有考虑一些警告,但我只是想在进入更复杂的情况之前获得大多数正则表达式工作的基本捕获。
关于我哪里出错的任何指针?
【问题讨论】:
-
我也尝试用空格替换 '\n' 但没有奏效。
标签: regex string perl multiline