Мне интересно, возможно ли извлечь позицию индекса в заданной строке, где Regex потерпел неудачу при попытке сопоставить его?
Например, если моим регулярным выражением было "abc", и я попытался сопоставить его с "abd", совпадение завершилось бы с индексом 2.
Изменить для уточнения. Причина, по которой мне это нужно, состоит в том, чтобы позволить мне упростить компонент анализа моего приложения. Приложение представляет собой инструмент обучения языку Assmebly, который позволяет студентам писать, компилировать и выполнять ассемблерные программы.
В настоящее время у меня есть класс токенизатора, который преобразует входные строки в токены с помощью регулярных выражений. Это работает очень хорошо. Например:
Токенайзер выдаст следующие токены при следующем вводе = "INP: x:"
:
Token.OPCODE, Token.WHITESPACE, Token.LABEL, Token.EOL
Эти токены затем анализируются, чтобы убедиться, что они соответствуют синтаксису для данного оператора. В настоящее время это делается с помощью операторов IF и оказывается громоздким. Плюсом этого подхода является то, что я могу предоставить подробные сообщения об ошибках. * Т.е. 1013 *
if(token[2] != Token.LABEL) { throw new SyntaxError("Expected label");}
Я хочу использовать регулярное выражение для определения синтаксиса вместо надоедливых операторов IF. Но при этом я теряю возможность возвращать подробные отчеты об ошибках. Поэтому я хотел бы хотя бы сообщить пользователю, ГДЕ произошла ошибка.