совпадает с цифрами тоже! И эта простая ошибка заставила меня усомниться в системе и опубликовать вопрос!

кст, Я разрабатываю движок Lexer / Tokenizing, который будет использовать регулярное выражение в качестве бэкэнда. Лексер принимает правила, которые определяют типы / идентификаторы токенов, например,

<identifier> = "\\b\\w+\\b".

Как я предполагаю, для выполнения токенизации на основе соответствия регулярному выражению все правила, определенные регулярными выражениями, заключаются в группы захвата, и все группы разделяются OR.

Когда сопоставление выполняется, каждое совпадение, которое мы производимдолжен иметь индекс группы захвата, с которой было сопоставлено, Мы используем эти идентификаторы для сопоставления совпадений с типами токенов.

Таким образом, возникает проблема этого вопроса -как получить идентификатор группы?

Подобный вопрос здесь, но это не дает решения моей конкретной проблемы.

Именно моя проблемаВот, но это в JS, и мне нужно решение C / C ++.

Допустим, у меня есть регулярное выражение, состоящее из групп захвата, разделенных OR:

(\\b[a-zA-Z]+\\b)|(\\b\\d+\\b)

который соответствует целым числам или альфа-словам.

Моя проблема требует, чтобы индекс группы перехвата, с которым сопоставлялось совпадение регулярных выражений, мог быть известен, например, при сопоставлении строки

foo bar 123

Будет сделано 3 итерации. Групповые индексы совпадений каждой итерации будут0 0 1потому что первые два совпадения соответствуют первой группе захвата, а последнее совпадение соответствует второй группе захвата.

Я знаю что в стандартеstd::regex библиотека это не совсем возможно (regex_token_iterator это не решение, потому что мне не нужно пропускать какие-либо совпадения).

У меня мало знаний оboost::regex или библиотека регулярных выражений PCRE.

Каков наилучший способ выполнить эту задачу? Какую библиотеку и метод использовать?

Ответы на вопрос(1)

Ваш ответ на вопрос