我想知道是否有可能在尝试匹配它的给定字符串中提取Regex失败的索引位置?

例如,如果我的正则表达式为“abc”,而我尝试将其与“abd”匹配,则匹配将在索引2处失败。

编辑进行澄清。我需要这样做的原因是允许我简化应用程序的解析组件。该应用程序是一种Assmebly语言教学工具,它允许学生编写,编译和执行类似于程序的程序集。

目前,我有一个tokenizer类,该类使用正则表达式将输入字符串转换为Token。这很好。例如:

给定以下输入=“INP:x:”, token 生成器将产生以下 token :

Token.OPCODE, Token.WHITESPACE, Token.LABEL, Token.EOL

然后分析这些标记以确保它们符合给定语句的语法。当前,这是使用IF语句完成的,并且非常麻烦。这种方法的好处是我可以提供详细的错误消息。 IE
if(token[2] != Token.LABEL) { throw new SyntaxError("Expected label");}

我想使用正则表达式来定义语法,而不要使用烦人的IF语句。但是这样做会使我无法返回详细的错误报告。因此,我至少想通知用户发生错误的位置。

最佳答案

我同意Colin Younger的观点,我认为现有的Regex类不可能实现。但是,我认为如果您愿意多汗一点是可行的:

  • 获取Regex类源代码
    (例如。
    http://www.codeplex.com/NetMassDownloader
    下载.Net源代码)。
  • 更改代码以使其具有只读权限
    带有失败索引的属性。
  • 确保您的代码使用该正则表达式
    而不是微软的。
  • 10-05 21:04
    查看更多