每种编程语言对\n
和\r
都有自己的解释.
空格转义是字符U+006E(n)、U+0072(r)中的一个,
根据这句话,如果 rust 字符是\n
或\r
,我会说 rust 字符是新行字符.在Windows上,它可能是\r
和\n
的组合.不过我不确定.
下面呢?
- 下一行字符(U+0085)
- 行分隔符字符(U+2028)
- 段落分隔符字符(U+2029)
在我看来,我们缺少了像char.is_new_line()
这样的东西.
我需要自己定义Unicode新行字符吗?
每种编程语言对\n
和\r
都有自己的解释.
空格转义是字符U+006E(n)、U+0072(r)中的一个,
根据这句话,如果 rust 字符是\n
或\r
,我会说 rust 字符是新行字符.在Windows上,它可能是\r
和\n
的组合.不过我不确定.
下面呢?
在我看来,我们缺少了像char.is_new_line()
这样的东西.
我需要自己定义Unicode新行字符吗?
Java、Python、Go和JavaScript等语言在新行字符的构成以及如何转换为"新行"方面存在很大的实际分歧.在多行模式下,包含regex引擎的电池是如何处理像$
这样的模式和像\r\r\n\n
这样的字符串的:是有两行(\r\r\n
、\n
)、三行(\r
、\r\n
、\n
,像Unicode所说)还是四行(\r
、\r
、\n
、\n
,像JS所看到的)?Go和Python不会将\r\n
视为一个$
,Rust的regex crate 也不会;然而,Java的的确如此.我不知道有哪种语言的电池能将换行符处理扩展到更多的Unicode字符.
所以这里的外卖是
\n
是一条新线\r\n
可能是一条新线\r\n
被视为两个换行符\r\n
是"某个字符后跟一个换行符"如果你真的需要更多的Unicode字符作为换行符来处理,你必须定义一个函数来实现这一点.不要期待现实世界中的投入.毕竟,我们有了无数年的ASCII记录分隔符,每个人都使用\t
.
更新:请参阅http://www.unicode.org/reports/tr14/tr14-32.html#BreakingRules第LB5
节,了解为什么\r\r\n
应被视为两个换行符.你可以通读整页,了解你最初的问题应该如何实施.我的猜测是,当你达到"South East Asian: line breaks require morphological analysis"时,你将关闭该选项卡:-)