【发布时间】:2012-10-22 14:05:44
【问题描述】:
我想使用Scanner 在单词边界处拆分字符串。通常,这将是这样完成的:
Scanner scanner = new Scanner(...).useDelimiter("\\b");
问题是我对“单词”字符的定义与标准的[a-zA-Z_0-9] 有点不同,因为我想包含更多字符并排除_:[a-zA-Z0-9#/]。因此,我不能使用\b 模式。
所以我尝试使用前瞻和后瞻来做同样的事情,但我想出的方法不起作用:
(<?=[A-Za-z0-9#/])(?![A-Za-z0-9#/])|(<?![A-Za-z0-9#/])(?=[A-Za-z0-9#/])
扫描仪不会使用这个分割任何地方。
是否可以使用前瞻和后视以及如何做到这一点?
【问题讨论】:
-
只是一个小问题,但是您对
\b的“标准”定义也是错误的。 -
我没有给出,但我认为它类似于
(?<=\w)(?!\w)|(?<!\w)(?=\w)。 -
这就是 supposed 的定义方式,如果您使用 Java 7 及其新的UNICODE_CHARACTER_CLASS 模式,就是这样。但是 Java 的旧版
\b更具...创造性。详情请参阅this question,尤其是@tchrist 的回答。
标签: java regex lookahead lookbehind