【问题标题】:Issue with Java Regex \bJava 正则表达式问题 \b
【发布时间】:2012-01-08 13:36:26
【问题描述】:

我在 Java 正则表达式中尝试了\b(这意味着单词的最后一个字符),但这不起作用。

String input = "aaa aaa";
Pattern pattern = Pattern.compile("(a\b)");
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println("Found this wiki word: " + matcher.group());
}

问题出在哪里?

【问题讨论】:

  • 注意:\b 不是“单词的最后一个字符”,而是“单词和非单词之间的边界”。
  • 我不确定你想做什么,即使修正了正则表达式("a\\b",并查看其他关于\b 的 cmets),你的组将始终只包含 a。那么,你想做什么呢?

标签: java regex


【解决方案1】:

在 Java 中,"\b" 是一个退格字符 (char 0x08),在正则表达式中使用时将匹配一个退格文字。

您需要正则表达式a\b,它在 java 中通过转义反斜杠进行编码,如下所示:

"a\\b"

顺便说一句,您对正则表达式\b 的含义只是部分正确-它实际上表示“单词边界”(单词的开头或结尾)。

【讨论】:

  • 而且它可能会在非 ASCII 单词上失败(除非您使用的是 JDK 7),其中 \b 在意想不到的地方匹配(由 | 可视化:@987654328 @)。
【解决方案2】:

Java 字符串中的文字反斜杠需要转义,因此正则表达式 \b 变为 "\\b" 作为 Java 字符串。

【讨论】:

  • 呃……什么? Regex = 正则表达式。
  • \` and \b` 都是 Java 中的转义序列(字符)。
  • 那又怎样?我不明白你的意思。他在问如何编写那个正则表达式,所以这就是我要告诉他的......谁在乎 \b 是什么意思?他想要\\b。
  • 我只是表示您使用的术语不正确的
  • 嗯? \b 在那里?我不会在这个无用的讨论中进一步回答。
猜你喜欢
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 2011-09-04
  • 2011-04-25
相关资源
最近更新 更多