совпадает с цифрами тоже! И эта простая ошибка заставила меня усомниться в системе и опубликовать вопрос!
кст, Я разрабатываю движок 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.
Каков наилучший способ выполнить эту задачу? Какую библиотеку и метод использовать?