regex - 从 chomped 行中获取 Perl 分隔符之间的值

标签 regex perl chomp

我试图使用正则表达式获取 Perl 中两个分隔符之间的值。我正在打开一个文件并使用 chomp 逐行浏览该文件。文件外观示例:

"This is <tag> an </tag> example
of the <tag> file </tag> that I
am <tag> trying </tag> to <tag> parse </tag>"

我能够得到前几个单词:“an”、“file”,但在第三行我只能得到“trying”而不能得到“parse”。这是我尝试使用的代码:

while (chomp($line = <$filename>)){
   ($tag) = $line =~ m/<tag>(.*?)<\/tag>/;
   push(@tagarray, $tag);
}

我怀疑这与 chomp 有关,但不知道如何以不同的方式解析文件。

最佳答案

您需要修改正则表达式以获取多个匹配项:

my @tags = $line =~ m/<tag>(.*?)<\/tag>/g;

您最好使用 HTML 解析器来执行此操作。用正则表达式解析HTML是fraught with peril 。例如,看一下 HTML::TagParser :

my $html = HTML::TagParser->new(<<'EOF');
This is <tag> an </tag> example
of the <tag> file </tag> that I
am <tag> trying </tag> to <tag> parse </tag>
EOF

my @tags = $html->getElementsByTagName('tag');
my @tagarray = map { $_->innerText() } @tags;

关于regex - 从 chomped 行中获取 Perl 分隔符之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47163439/

相关文章:

regex - 这个正则表达式匹配并且不应该。为什么?

jquery - JavaScript 中相同 match() 方法的两个字符串

perl - 使用perl重命名txt文件扩展名

perl - 为什么 Perl 的 chomp 会影响我的打印输出?

php替换正则表达式

php - 从 preg_replace 到 preg_replace_callback

perl - Perl 中的 chomp 未按预期工作

Java 如何从字符串中删除回车符 (HEX 0A)?

Perl 脚本运行正常,但作为 crontab 它不工作

arrays - 将哈希键转换为数组