Metacharacter\B匹配(OCP考试)

Ste*_*ker 8 java regex ocpjp

我正在攻读Java OCP证书.我正在参加模拟考试准备.

示例程序:

public class Quetico {
    public static void main(String[] args) {
        Pattern p = Pattern.compile(args[0]);
        Matcher m = p.matcher(args[1]);
        while (m.find()) {
            System.out.println(m.start() + " ");
        }
        System.out.println("");
    }
}
Run Code Online (Sandbox Code Playgroud)

OCA/OCP Jave SE 7学习指南的作者认为执行:

java Quetico "\B" "^23 *$76 bc"
Run Code Online (Sandbox Code Playgroud)

将产生输出

0 2 4 8
Run Code Online (Sandbox Code Playgroud)

但是,当我从Eclipse运行代码或在外部源代码上测试它时,我得到了

0 2 4 5 7 10
Run Code Online (Sandbox Code Playgroud)

我在这里遗漏了什么,还是学习指南的作者错了?

我正在添加下面这本书中的实际问题以供参考.

书中的问题

OCP Java 7自测题8.3

回答

在此输入图像描述

pas*_*qui 6

这本书是正确的(当使用通常的shell在Unix机器上执行时).它是shell行为和java的组合(在我看来,偏离Java课程).记住shell中的"$"表示替换.所以,如果你把程序称为:

java Quetico "\B" "^23 *$76 bc"
Run Code Online (Sandbox Code Playgroud)

与正则表达式匹配的字符串是(您可以为args [1]添加println以验证它):

^23 *6 bc
Run Code Online (Sandbox Code Playgroud)

结果由"0 2 4 8"一书给出.

您可以将结果与以下结果进行比较:

java Quetico "\B" '^23 *$76 bc'
Run Code Online (Sandbox Code Playgroud)

禁用shell替换.