(F) lex не реализует группы захвата, а также не реализует прогнозные утверждения. В общих чертах, он реализует только конструкции, которые соответствуют математическому определению «регулярного выражения», поэтому abd может быть реализован с помощью простого конечного автомата, работающего в линейном времени и постоянном пространстве.
(краткая и полная) документация по синтаксису регулярного выражения содержится в руководстве по Flex .
(«f» в «flex» означает «быстрый», но оригинальное «lex» также было довольно быстро, в основном из-за этого решения о дизайне.)
У вас есть два варианта, в зависимости от точной природы ваших токенов:
Если вы определенно можете распознать токен из первой части, то вы можете использовать условие запуска для распознавания остальной части токена
В противном случае вы можете распознать весь токен в одном регулярном выражении, а затем отсканировать его, чтобы выяснить, какую часть вы хотите сохранить. Вы можете или не сможете выполнить второе сканирование с помощью flex; опять же, вы можете использовать начальное условие, чтобы применить другие правила для повторного сканирования, но это будет зависеть от точного характера вашего шаблона. Вы также можете выполнить повторное сканирование с помощью библиотеки регулярных выражений, либо стандартной библиотеки Posix, либо более гибкой библиотеки, такой как PCRE.
Обратите внимание, что (f) lex также не реализует нежадное повторение, поэтому, если вы хотите реализовать " самую короткую строку, начинающуюся с X и заканчивающуюся Y", вам нужно использовать такую технику, как тот, который показан в (последнем) примере в главе руководства Flex по условиям запуска