【发布时间】:2016-07-18 22:38:58
【问题描述】:
我想用 Perl 循环一个文件(或一个数组),当匹配一个正则表达式时开始处理元素,当遇到另一个正则表达式时停止处理。
一种方法是将变量用作标志(当满足起始正则表达式时=1,当满足结束正则表达式时=0)。
例如,下面的作品,但非常丑陋!
use strict;
my @file = (
"<title>List of widgets</title>\n",
"<widgets>\n",
" <button>widget001.xml</button>\n",
" <textArea>widget002.xml</textArea>\n",
" <menu>widget002.xml</menu>\n",
"</widgets>\n",
"<footer>\n",
" This is the footer\n",
"</footer>\n",
);
my $in_list_widgets = 0;
for my $line (@file) {
if ($line=~m%<widgets%) {
$in_list_widgets = 1;
} elsif ($line=~m%</widgets>%) {
$in_list_widgets = 0;
} else {
if ($in_list_widgets == 1) {
&process_line($line);
} else {
#Do nothing
}
}
}
sub process_line {
my $line = shift;
print $line;
}
有什么更优雅的方法可以做到这一点并且仍然得到相同的结果?
<button>widget001.xml</button>
<textArea>widget002.xml</textArea>
<menu>widget002.xml</menu>
谢谢
【问题讨论】:
-
这看起来像 XML。是 XML 吗?因为如果是这样 - XML 解析器可以很简单地做到这一点。