编码问题正则表达式

时间:2018-03-30 17:58:23

标签: java regex encoding

我有以下正则表达式:

^[0-9a-z]+\.[ ]+(table of )?contents

目的是匹配字符串,例如:
“b。目录”

我正在使用PDFBox来解析pdf文档,我逐行查找上面提到的字符串。有趣的是,当doc找到一个完全符合“b。目录”的字符串时,该字符串无法与正则表达式匹配。

现在我通过在线正则表达式测试仪上手动输入完全相同的字符串进行测试,我得到了一个匹配: enter image description here

当我尝试复制粘贴解析文本时,看起来与我输入的字符串完全相同,我没有得到匹配: enter image description here

而且仅供参考,这些是单一空格,没有标签。在进一步检查并比较两个字符串后,似乎解析器中的字符串有一些奇怪的字符表示为空白空间,如下所示:

b.† table†of†contents

但是在记事本上它只是看起来像:

b.† table†of†contents

我必须猜测这是一个编码问题或类似的东西,但是如果我尝试写一个正则表达式来解释这个奇怪的角色,那么仍然没有匹配: enter image description here

这是我尝试过的正则表达式:

^[0-9a-z]+\.[ †]+(table[ †]+of[ †]+)?contents

那么无论如何都要考虑这个um编码所以正则表达式可以拿起它吗? 如果有人有兴趣,我使用字符串'matches'方法将字符串与我的代码中的正则表达式匹配。

更新
请参阅下面的评论,以获取正则表达式和字符串的链接。

1 个答案:

答案 0 :(得分:2)

如果您复制粘贴使用正则表达式的行并打印包含

的字符
System.out.println(Arrays.toString("b.  table of contents".chars().toArray()));

你会看到结果:

[98, 46, 160, 32, 116, 97, 98, 108, 101, 32, 111, 102, 32, 99, 111, 110, 116, 101, 110, 116, 115]
//       ^^^ 

160No-Break Space的索引,与索引为32的简单空格不匹配会导致正则表达式失败。

要解决此问题,请将符号替换为这样的空白^[0-9a-z]+\.[  ]+(table[  ]+of[  ]+)?contents

要获得更一般的解决方案,请访问Java doesn't see space in string