我正在尝试打开一个文件,匹配特定的行,然后将 HTML 标记包裹在该行周围。看起来非常简单,但显然我遗漏了一些东西并且没有正确理解 Perl 匹配模式变量。
我正在匹配这条线:
$line =~ m/(Number of items:.*)/i;
将整行放入 $1。然后我尝试像这样打印出我的新行:
print "<p>" . $1 . "<\/p>;
我希望它打印这个:
<p>Number of items: 22</p>
但是,我实际上得到了这个:
</p>umber of items: 22
我尝试了各种变体 - 在单独的行上打印每一位,将 $1 设置为新变量,使用 $+ 和 $& 等,我总是得到相同的结果。
我错过了什么?
最佳答案
你的比赛中有一个\r,打印时会导致格式错误的输出。
编辑: 为了进一步解释,您的文件很可能具有 Windows 样式的\r\n 行结尾。 chomp 不会删除\r,它随后会被吞噬到你贪婪的匹配中,并导致令人不快的输出(\r 意味着返回到行的开头并继续打印)。
您可以通过添加类似
的内容来删除\r$line =~ tr/\015//d;
关于regex - Perl模式匹配变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4609202/