我在理解正则表达式出了什么问题时遇到了很大的麻烦。为了完整起见,我将列出一些背景信息。
这个程序应该实现一个 SIMPLESEM 解释器。这里关注的语法是这样的:
< Expr > ==> < Term > {( + | - ) < Term >}
< Term > ==> < Factor > {( * | / | % ) < Factor >}
< Factor > ==> < Number > | D[< Expr >] | (< Expr >)
< Number > ==> 0 | (1..9){0..9}
我得到了这段代码,它应该给我 a 方括号内的内容< Factor >
,但它没有用:
Matcher m;
(m = Pattern.compile("D\\[(.*)").matcher(expr)).find();
expr = parseExpr(m.group(1));
(m = Pattern.compile("\\](.*)").matcher(expr)).find();
expr = m.group(1);
作为示例输入,我有这个:
jumpt 5, D[0] == 0
这里< Factor >
关心的是D[0]
。它不起作用,因为上面的函数0]
不parseExpr()
处理左括号,它不应该处理。所以我把它改成:
(m = Pattern.compile("D\\[(.*)").matcher(expr)).find();
expr = m.group(1);
(m = Pattern.compile("\\](.*)").matcher(expr)).find();
expr = parseExpr(m.group(1));
但由于匹配器/正则表达式,这不起作用。我相信它输出了一个空字符串。所以然后我尝试了这个,它只是给了我一个没有匹配的错误:
(m = Pattern.compile("D\\[(.*)").matcher(expr)).find();
expr = m.group(1);
if(expr.contains("(.*)"))
{
(m = Pattern.compile("\\](.*)").matcher(expr)).find();
}
else
{
(m = Pattern.compile("\\]").matcher(expr)).find();
}
expr = m.group(1);
expr = parseExpr(expr);
它在倒数第二行给出超出范围的索引。在此先感谢您的帮助。