【发布时间】:2010-09-11 13:34:16
【问题描述】:
我想知道是否可以提取给定字符串中正则表达式在尝试匹配时失败的索引位置?
例如,如果我的正则表达式是“abc”并且我尝试将其与“abd”匹配,则匹配将在索引 2 处失败。
为澄清而编辑。我需要这个的原因是允许我简化我的应用程序的解析组件。该应用程序是一个汇编语言教学工具,允许学生编写、编译和执行汇编类程序。
目前我有一个标记器类,它使用正则表达式将输入字符串转换为标记。这很好用。例如:
在给定以下输入 = "INP :x:"
:
Token.OPCODE, Token.WHITESPACE, Token.LABEL, Token.EOL
然后分析这些标记以确保它们符合给定语句的语法。目前这是使用 IF 语句完成的,并且被证明很麻烦。这种方法的好处是我可以提供详细的错误消息。即
if(token[2] != Token.LABEL) { throw new SyntaxError("Expected label");}
我想使用正则表达式来定义语法而不是烦人的 IF 语句。但是这样做我失去了返回详细错误报告的能力。因此,我至少想通知用户错误发生的位置。
【问题讨论】:
-
我很想知道这是否真的变得更容易了。从来没有看过编译器的代码,我的猜测是生成错误消息的代码通常看起来和你现在的差不多。
-
最后我决定继续使用 IF 语句。不过,我从任何派生的 Statement 类中删除了实际的 IF 语句,而是在我的基本 Statement 类中放置了一个 CheckSyntax() 方法,该方法执行 IF 检查/抛出异常。这让我删除了很多重复的代码。