如何一次处理多行字符串行

时间:2011-05-24 13:59:13

标签: perl string

我想从字符串中获取两个分隔符(正则表达式)之间的子字符串。我想用这个:

while (<>) {
  if (/START/../END/) {
    next if /START/ || /END/;
    print;
  }
}

但这适用于标准输入线。我想让它在一个字符串的行上工作。怎么样?

3 个答案:

答案 0 :(得分:6)

如果您的意思是要处理已包含多行的字符串,请使用split:

foreach (split(/\n/, $str)) {
  if (/START/../END/) {
    next if /START/ || /END/;
    print;
  }
}

答案 1 :(得分:5)

简单地:

my ($between) = $string =~ /START(.*?)END/s;

或者,从字符串中读取:

use 5.010;
open my $string_fh, "<", \$string or die "Couldn't open in-memory file: $!";
while ( <$string_fh> ) {
    ...

答案 2 :(得分:0)

有很多方法可以将多行数据转换为字符串。如果您希望在读取输入时自动执行此操作,则需要设置$/(可能为''表示段落或整个文件的undef),以允许您一次读取多行。 / p>

请参阅“多行”部分@ perldoc