maa*_*nus 8 java regex unicode perl
从逻辑上讲,它是(但无论何时角色编码或区域设置正在运行,逻辑都无关紧要).根据
perl -e 'print "\n" =~ /\v/ ? "y\n" : "n\n";'
Run Code Online (Sandbox Code Playgroud)
打印"y",它是.根据
Pattern.compile("\\v").matcher("\n").matches();
Run Code Online (Sandbox Code Playgroud)
false
在java中返回,它不是.如果没有这个帖子声称,这根本不会让我感到困惑
Sun为JDK7更新的Pattern类有一个奇妙的新标志UNICODE_CHARACTER_CLASS,它使一切正常工作.
但我使用的是java版本"1.7.0_07"并且该标志存在并且似乎根本没有任何改变.此外,"\n"是不是初来乍到的Unicode而是一个普通的老ASCII字符,所以我实在看不出这种差异可能是如何发生的.可能我做的事情很愚蠢,但我看不到.
rua*_*akh 17
Javadocjava.util.regex.Pattern
\v
在其"此类不支持的Perl构造列表"中明确提及.所以它\n
并不属于Java的"垂直空白"类别; 它是Java不具备 "垂直空白"的范畴.
编辑添加:相反,\v
代表垂直制表符U + 000B.这是一个传统的逃脱序列; 还有一些其他传统的转义序列在Java字符串文字中是不允许的,但是受到Pattern
(\a
对于alert/bell,\cX
对于控制字符X
)的支持.但奇怪的是,Javadoc Pattern
没有提到它支持\v
; 所以我不确定是否可以在所有JDK实现中支持它.
perldoc perlrecharclass
说\v
匹配"垂直空白字符".这进一步解释了:
"\ v"匹配任何被认为是垂直空格的字符; 这包括平台的回车符和换行符(换行符)以及其他几个字符,全部列在下表中."\ V"匹配任何不被视为垂直空格的字符.它们使用平台的本机字符集,并且不考虑可能正在使用的任何区域设置.
具体来说,\v
匹配5.16中的以下字符:
$ unichars -au '\v' # From Unicode::Tussle
---- U+0000A LINE FEED
---- U+0000B LINE TABULATION
---- U+0000C FORM FEED
---- U+0000D CARRIAGE RETURN
---- U+00085 NEXT LINE
---- U+02028 LINE SEPARATOR
---- U+02029 PARAGRAPH SEPARATOR
Run Code Online (Sandbox Code Playgroud)
您可以使用字符类来获得与Perl相同的效果\v
.
当然这适用于Perl; 我不知道它是否适用于Java.
归档时间: |
|
查看次数: |
13935 次 |
最近记录: |