Alt*_*ape 6 java regex unicode character-properties
我正在尝试使用Pattern.split()将Java正则表达式分解为"foo"和"bar"." - "字符可能是几个短划线之一:ASCII' - ',em-dash,en-dash等.我构造了以下正则表达式:
private static final Pattern titleSegmentSeparator = Pattern.compile("\\s(\\x45|\\u8211|\\u8212|\\u8213|\\u8214)\\s");
Run Code Online (Sandbox Code Playgroud)
如果我正确地阅读Pattern文档,那么当两边都被空格包围时,它应该捕获任何unicode破折号或ascii破折号.我使用的模式如下:
String[] sectionSegments = titleSegmentSeparator.split(sectionTitle);
Run Code Online (Sandbox Code Playgroud)
没有快乐.对于下面的示例输入,未检测到破折号,titleSegmentSeparator.matcher(sectionTitle).find()返回false!
为了确保我没有遗漏任何不寻常的字符实体,我使用System.out打印一些调试信息.输出如下 - 每个字符后跟(int)char的输出,它应该是它的'unicode代码点,不是吗?
样本输入:
研究摘要(1/10) - 竞争
S(83)t(116)u(117)d(100)y(121)(32)S(83)u(117)m(109)m(109)a(97)r(114)y(121) )(32)((40)1(49)(32)o(111)f(102)(32)1(49)0(48))(41)(32) - (8211)(32)C( 67)O(111)M(109)p(112)E(101)T(116)I(105)T(116)1(105)○(111)N(110)
在我看来,破折号是代码点8211,它应该与正则表达式匹配,但事实并非如此!这里发生了什么?
Tim*_*ker 12
你是混合decimal(8211)和十六进制(0x8211).
\x并且\u都期望一个十六进制数,因此您需要使用\u2014匹配em-dash,而不是\u8211(和\x2D普通的连字符等).
但为什么不简单地使用Unicode属性"Dash标点符号"?
作为Java字符串: "\\s\\p{Pd}\\s"
| 归档时间: |
|
| 查看次数: |
6338 次 |
| 最近记录: |