我正在尝试使用Pattern.split()方法,编写一个Java正则表达式将一般格式为“foo - bar”的字符串拆分成“foo”和“bar”。这里的“-”字符可能是多个破折号中的一个:ASCII破折号、em-dash、en-dash等。我构建了以下正则表达式:
private static final Pattern titleSegmentSeparator = Pattern.compile("\\s(\\x45|\\u8211|\\u8212|\\u8213|\\u8214)\\s");
如果我正确地阅读了Pattern文档,这个模式应该可以捕获任何unicode破折号或ascii破折号,只要两边都有空格。我使用的模式如下:
String[] sectionSegments = titleSegmentSeparator.split(sectionTitle);
没有成功。对于下面的示例输入,破折号未被检测到,而titleSegmentSeparator.matcher(sectionTitle).find()返回false!为了确保我没有错过任何不寻常的字符实体,我使用System.out打印了一些调试信息。输出如下--每个字符后面都跟着(int)char的输出,这应该是它的Unicode代码点,不是吗?样例输入:看起来像那个破折号是代码点8211,应该与正则表达式匹配,但它没有!这里发生了什么?