gpt4 book ai didi

perl - 为什么行终止符 `\r\n` 导致组不匹配?

转载 作者:行者123 更新时间:2023-12-03 23:19:51 24 4
gpt4 key购买 nike

我正在使用 Perl v5.30 在 Linux 上处理带有 Windows 行终止符 ( \r\n ) 的文本文件。
我不明白的是为什么使用这些文本文件捕获组不匹配字符,而正则表达式匹配。
例子:

$ echo $'Line1\r\nLine2\n' | perl -ne 'print /(.*)/'
Line2

$ echo $'Line1\r\nLine2\n' | perl -ne '/(.*)/ && print "match\n"'
match
match
match
第一行没有任何内容被捕获,但所有(三)行都匹配。
为什么会这样?

最佳答案

使用 cat -vxxd查看输出真正包含的内容。

$ echo $'Line1\r\nLine2\n' | perl -ne 'print /(.*)/' | cat -v
Line1^MLine2
^M对应于 \r ,它将光标移回行首,因此第二个匹配会覆盖第一个匹配。
这解释了两场比赛,但第三场在哪里?添加一些东西来分隔匹配:
 $ echo $'Line1\r\nLine2\n' | perl -ne 'print /(.*)/, "|"' | cat -v
Line1^M|Line2||
echo在它的输出中添加一个换行符,所以最后一行是空的,但它仍然匹配 .* .

关于perl - 为什么行终止符 `\r\n` 导致组不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66617751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com