我正在完成一本班轮书并且遇到了
perl -pe 's/$/\n/' file
Run Code Online (Sandbox Code Playgroud)
通过将行的结尾设置为新行,在每行之后插入一个空行,从而在现有换行符中添加一个新行,从而产生一个空行.因为这是第一个没有g模式结束的例子,我试过了
perl -pe 's/$/\n/g' file
Run Code Online (Sandbox Code Playgroud)
这导致行之间有2个空行.
我原本预计没有区别,因为$每行只有一个,所以替换所有这些应该与替换第一个相同.
这里发生了什么?
/$/匹配"字符串结束".这可能是
/\z/),/(?=\n\z)/).(另外,/$/m匹配"行尾".这可能是
/(?=\n)/).).
通过替换/$/\n/g,正则表达式匹配两次:一次在换行符之前,然后再次在字符串结尾处:
第一场比赛在换行前:
"foo\n"
# ^ match
Run Code Online (Sandbox Code Playgroud)
在当前比赛结束之前放置换行符:
"foo\n\n"
# ^ insert before
Run Code Online (Sandbox Code Playgroud)下一场比赛是在字符串的末尾:
"foo\n\n"
# ^ match
Run Code Online (Sandbox Code Playgroud)
在当前匹配结束之前插入换行符:
"foo\n\n\n"
# ^ insert before
Run Code Online (Sandbox Code Playgroud)没有找到进一步的匹配.
解决方案:如果$是给你DWIMmy,总是匹配\z或\n明确,可能与前瞻一样(?=\n).考虑匹配所有Unicode行分隔符\R而不仅仅是\n.
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |