Использование Regex для сопоставления нескольких экземпляров символа в строке из списка, но только одного из следующих символов - PullRequest
0 голосов
/ 15 декабря 2018

Предположим, у меня есть набор символов {abcd}.И предположим, что у меня есть последовательность строк.

aabb
ddccddcc
aaaa
bbbb
dddd
cdddcd

Я хотел бы написать регулярное выражение, чтобы соответствовать всем строкам, которые любой (и только один ) символ из этого набора повторяется четырераз подряд мы сопоставляем эту строку.

Например, aaaa будет истинным.Однако aabb не будет соответствовать этому критерию, так как если он использует символ в наборе для времен подряд, это не те же четыре символа.Кроме того, cdddcd не будет соответствовать этому критерию, так как четыре d разделены символом c .Поэтому мы должны исключить использование [abcd] {4}.

Хотя я мог бы сделать следующее:

a{4}    { return A;}
b{4}    { return B;}
c{4}    { return C;}
d{4}    { return D;}

Однако я хотел бы развить свою способность писать регулярные выражения,и я уверен, что должен быть способ использования некоторой логики для выполнения задачи, которую я хотел бы использовать с меньшим количеством операторов.Спасибо за прочтение!:)

1 Ответ

0 голосов
/ 15 декабря 2018

Нет способа записать это в регулярном выражении Flex, кроме как выписать его, как вы.

Многие так называемые библиотеки "regex" предоставляют способ сделать это, обычно называемый "назад".-Рекомендации".Эти библиотеки обычно перегружены множеством таких функций, которые могут привести к тому, что совпадения регулярных выражений занимают квадратичное или даже экспоненциальное время (хотя они могут быть очень удобными).

Однако flex не поддерживает эти функции.Регулярные выражения Flex действительно являются регулярными (то есть соответствуют математической модели) и, как следствие, могут быть скомпилированы в конечные автоматы, время выполнения которых гарантировано линейно и, как правило, очень быстро.В ожидаемом случае использования Flex - компиляторов - токены редко требуют сложных шаблонов, и важны гарантии производительности.

(Это не совсем полная история, но хорошее приближение.)

...