LINUX.ORG.RU

Disjoint regular expressions.


0

0

Привет!

Допустим, что имеется N регулярных выражений.
Для простоты:
1) Не рассматриваем multi-line mode.
2) Считаем, что все регулярные выражения начинаются с 
маркера начала строки (^) и заканчиваются маркером
конца строки ($).

То есть рассматриваются выражения вида:
^abc.*(tcp|udp)[5-8].+$

Очевидно, что регулярные выражения 
^a.*$
и
^b.*$
порождают непересекающиеся множества строк.

Очевидно также, что регулярные выражения 
^a.*$
^aa.*$
^.*b$
задают множества строк, пересечение которых не пусто.
Например, строка "aaXXXb".

Задача заключается в том, чтобы имея N регулярных выражений:
1) Определить, пересекаются ли порождаемые ими множества строк.
2) Если пересекаются, то определить какие именно регулярные
выражения "конфликтуют" (результат можно представить в виде 
треугольной матрицы).

Есть ли готовые алгоритмы решения данной задачи?

Спасибо!

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

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Примерно так я себе это и представлял.
До того как не дошел до "выпендросов".

Посмотрю в сторону форм представления регулярных выражений и 
произведения конечных автоматов.

Krivenok_Dmitry
() автор топика
Ответ на: комментарий от balodja

Нет, нужно параллелерить, пиши на haskell.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.