LINUX.ORG.RU

Есть мысли, как выделить из регекспа синтаксически корректный кусок?

 ,


0

2

Доброго времени суток

Сабж. Есть около сотни длинных регекспов, каждый из которых начинается с '^'. У многих из них достаточно много общего

Хочется сгруппировать их по общему началу, и применять не весь плоский список, а древовидно, т.е. т.е. не

[
 '^match1match2',
 '^match1match3',
 '^match4match5',
 '^match4match6',
 ...
]

а

[ '^match1' => [
    '^match1match2',
    '^match1match3',
  ],
'^match4' => [
    '^match4match5',
    '^match4match6',
  ],
  ...
]

Есть идеи, как выбрать из начала регекспа синтаксически корректный регексп ?

★★★★★

Подумал, что в моём случае можно не решать универсальную задачу, а пытаться разбить по нескольких фиксированным символам ( пробел, двоеточие ) и выполнять несколько простых проверок ( : не должно быть частью (?:)

а после этого тупо попытаться преобразовать строку в qr// и применить к тестовой в блоке eval do

router ★★★★★
() автор топика

По-простому можно проходить посимвольно по регекспам пока не встретится любой метасимвол, потом искать среди этих «начал» общие с каким-то порогом длины.

Но с сотней регекспов кажется будет быстрее и качественее вручную, особенно если отсортировать

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

Насколько я помню, в основном синтаксис совместим. Какие-то последовательности интерпретируются специалным образом.

urquan
()

Язык не указан ( хотя в примере похоже на Perl)

А так, есть re2c, лексер на языке С.

Там по набору регекспов прога строит префиксное дерево, то есть, общая для регексов часть будет проверена однажды.

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