在Oracle Pattern文档中,有三种不同模式的描述用于匹配空格:
我想知道每个人的特殊性以及如何选择合适的人.我刚才注意到\p{javaWhitespace}包含更多空间类型.
\s是指定空格字符的最短也是最不可移植的选项。尽管很少有将Java代码移植到其他语言的方法,但更多的是将一个正则表达式引擎的语法知识移植到另一种。有很多正则表达式引擎使用类似Perl的语法,因此对于相同语法的解释上的差异\s会使程序员感到困惑。
除了空格(ASCII 32),换行符(\n,ASCII 10),水平制表符(\t,ASCII 9),回车符(\r,ASCII 13)和换页符(\fASCII 12)外,不同引擎之间没有共识一个空格字符。
Java,POSIX(ASCII):还包括垂直制表符(ASCII 11)。Java似乎在这里遵循POSIX标准。
JavaScript(5.1版):根据规范(逐字排列),除了5种常见规范外,还包括:
Unicode类别Zs(分隔符/空格),\u2028(行分隔符),\u2029(段落分隔符)。它基本上包括Z类(分隔符)下的所有字符。
实际上\u2028是类别Zl(分隔符/行)\u2029的唯一成员,并且是类别Zp(分隔符/段落)的唯一成员。通过措辞,规范的当前版本可能会排除对这2类的任何进一步扩展。
\v\ufeffPerl,PCRE(ASCII模式):\vPerl 5.18作为实验添加了“ 垂直”选项卡。在5.18之前,它仅与5个常见的匹配。
Perl(Unicode模式):除了5种常见的
\v从Perl 5.18添加的垂直标签作为实验。\u0085\u180e.NET(默认):除了5个常见的
\v\u0085Java(Unicode):从Java 7开始,Pattern类包含一个新的标志UNICODE_CHARACTER_CLASS,该标志使Predefined字符类和POSIX字符类符合Unicode技术标准#18:Unicode正则表达式。当该标志处于活动状态时,预定义字符类和相应的POSIX字符类将等效(匹配相同的事物)。
字符列表与.NET相同。
这足以使一个人疯狂!
\p{Space}是更“稳定”的选择,因为它遵循POSIX标准的默认模式,统一技术标准#18:Unicode的正则表达式中UNICODE_CHARACTER_CLASS。
如果使用POSIX字符类,则与POSIX兼容的实现在ASCII模式下将具有相同的行为,并且遵循该建议的Unicode regex引擎在Unicode模式下将具有(几乎)相同的行为。
\s并且\p{Space}在Java中是等效的,与标志无关。如果使用\sJava,则可以确保遵循某些标准/建议。只是它没有向大多数程序员宣布这一事实。
\p{isJavaWhitespace}根据Java的定义匹配空白。函数的名称极具误导性。
| 归档时间: |
|
| 查看次数: |
2741 次 |
| 最近记录: |