为什么在找到的令牌(antlr)中出现空格?

时间:2013-10-06 07:08:43

标签: java regex antlr

我遇到一些问题。我添加了一个带有规则的令牌:

NUMBER   : [0-9]+.?[0-9]*;
WHITESPACE : [ \t\r\n]+ -> skip ;

我使用JUnit测试我的程序,如果我使用以下代码:

@Test
public void testWhiteSpaces() {
    verifyLexer("   \n7 \t", new String[] {"7"});
}

public void verifyLexer(String input, String[] expectedTokens) {
    CharStream stream = new ANTLRInputStream(input);
    ExpressionLexer lexer = new ExpressionLexer(stream);
    lexer.reportErrorsAsExceptions();
    List<? extends Token> actualTokens = lexer.getAllTokens();

    assertEquals(expectedTokens.length, actualTokens.size());

    for(int i = 0; i < actualTokens.size(); i++) {
         String actualToken = actualTokens.get(i).getText();
         String expectedToken = expectedTokens[i];
         System.out.println(actualToken + "?");
         assertEquals(actualToken, expectedToken);
    }

JUnit测试失败,它说它找到的令牌是“7”而不是“7”我的目标。怎么会? NUMBER令牌的注册表达式中没有涉及空格......

1 个答案:

答案 0 :(得分:2)

我想你忘了逃避正则表达式中的点:

[0-9]+\.?[0-9]*

点是一个匹配任何东西的特殊字符。在你的情况下的空白区域。