我想从字符串中获取两个分隔符(正则表达式)之间的子字符串。我想用这个:
while (<>) {
if (/START/../END/) {
next if /START/ || /END/;
print;
}
}
但这适用于标准输入线。我想让它在一个字符串的行上工作。怎么样?
答案 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