我正在完成一本班轮书并且遇到了
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 次 |
最近记录: |