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

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

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

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

目前我有一个tokenizer类,它使用正则表达式将输入字符串转换为令牌。 这非常有效。 例如:

给定以下输入=“INP:x:”时,标记生成器将生成以下标记

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

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

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

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

我同意Colin Younger,我认为现有的Regex类不可能。 但是,如果你愿意出汗,我认为这是可行的:

  1. 获取Regex类源代码(例如http://www.codeplex.com/NetMassDownloader以下载.Net源代码)。
  2. 将代码更改为具有失败索引的只读属性。
  3. 确保您的代码使用的是Regex而不是Microsoft。

我想这样的索引只会在一些简单的情况下有意义,就像在你的例子中一样。

如果您将采用像“ab * c * z”这样的正则表达式(其中*表示任何字符)和字符串“abbbcbbcdd”,那么索引应该是什么? 它将取决于用于计算的算法…可能在“abbbc …”或“abbbcbbc …”上失败

我不相信这是可能的,但我很感兴趣为什么你会想要它。

为了做到这一点,你需要嵌入在正则表达式中的回调(AFAIK C#不支持)或者最好挂钩到正则表达式引擎。 即便如此,如果涉及回溯,你还不清楚你会想要什么结果。

无法判断正则表达式失败的位置是不可能的。 因此,您需要采取不同的方法。 你需要比较字符串。 使用正则表达式删除可能变化的所有内容,并将其与您知道不会更改的字符串进行比较。

我遇到了同样的问题,得出你的答案,并不得不解决我自己的解决方案。 这里是:

https://stackoverflow.com/a/11730035/637142

希望能帮助到你