Java解析器和正则表达式

时间:2013-06-09 03:52:35

标签: java regex parsing

我正在编写一个解析器,我正在研究匹配不同的令牌,我在匹配方面遇到了一些麻烦。 我有一个测试文件:

while a != b
  if a > b
    a := a - b
  if a <= b
    b := b - a
elihw

我的部分代码:

private static Scanner sc = new Scanner(System.in);
private static Pattern tokenPattern = Pattern.compile("[ ]+");
private static Pattern idPattern = Pattern.compile("[a-zA-Z]+");

....main(...) {
      sc.useDelimiter(tokenPattern);
      statement();
    }

public static void statement() {
    System.out.println("Statement");
    String token = null;
    while (sc.hasNext()) {
        if (sc.hasNext(idPattern)) {
            token = sc.next();
            System.out.print(" (" + token + ") ");
        }
        else {
            token = sc.next();
            System.out.print(token + ' ');
        }
    }
}

当我运行此方法时,它匹配运算符之前的字符串,但不匹配之后的字符串。父母只是为了标记匹配的那些。 例如,行

a := a - b

将产生输出:

(a) := (a) - b

我无法弄清楚为什么b不匹配。

此外,如果有人可以帮助我使用匹配运算符的正则表达式,那将是很棒的。我尝试了很多这样的事情:

[\+\-\*\\]
[\\+\\-\\*\\\]
[+][-][*][/]

但似乎无法做到正确。

1 个答案:

答案 0 :(得分:0)

扫描程序可能包含一个不可打印(换行符)字符作为令牌的一部分。

试试这个:

private static Pattern tokenPattern = Pattern.compile("[ \r\n\t]+");

对于运营商,请尝试以下方法:

[<>+-/*=:]+