匹配失败的匹配字符串中的正则表达式索引

Ric*_*ton 7 c# regex

我想知道是否有可能在尝试匹配时正则表达式中提取正则表达式失败的给定字符串中的索引位置?

例如,如果我的正则表达式是"abc"并且我试图将其与"abd"匹配,则匹配将在索引2处失败.

编辑以澄清.我需要这个的原因是允许我简化我的应用程序的解析组件.该应用程序是一个Assmebly语言教学工具,允许学生编写,编译和执行程序集程序.

目前我有一个tokenizer类,它使用regex将输入字符串转换为Tokens.这非常有效.例如:

给定以下input ="INP:x:"时,tokenizer将生成以下标记
:

Token.OPCODE, Token.WHITESPACE, Token.LABEL, Token.EOL
Run Code Online (Sandbox Code Playgroud)

然后分析这些标记以确保它们符合给定语句的语法.目前,这是使用IF语句完成的,并且证明是麻烦的.这种方法的好处是我可以提供详细的错误消息.IE

if(token[2] != Token.LABEL) { throw new SyntaxError("Expected label");}
Run Code Online (Sandbox Code Playgroud)

我想使用正则表达式来定义语法而不是烦人的IF语句.但在这样做时,我失去了返回详细错误报告的能力.因此,我至少想告知用户发生错误的WHERE.

tor*_*ial 4

我同意 Colin Younger 的观点,我认为现有的 Regex 类不可能做到这一点。不过,我认为如果你愿意出一点汗,这是可行的:

  1. 获取 Regex 类源代码(例如, http://www.codeplex.com/NetMassDownloader 下载 .Net 源代码)。
  2. 将代码更改为具有带有故障索引的只读属性。
  3. 确保您的代码使用该正则表达式而不是 Microsoft 的。