Персистентные регулярки
От: okman Беларусь https://searchinform.ru/
Дата: 14.04.11 18:32
Оценка:
Всем привет.

Есть ли где-то такие регулярки для C++, чтобы их можно было скомпилировать, а
затем в этом скомпилированном состоянии сбросить на диск для последующего
использования ?

Грубо говоря, есть база из примерно миллиона регулярок, хочется взять boost::xpressive,
выполнить ко всем элементам базы regex::compile и в таком состоянии все это сериализировать.

Смысл в том, что каждый раз при запуске программы делать regex::compile для всей базы накладно —
это выливается в весьма нехилое ожидание порядка минуты. В то же время
скомпилированные регэкспы работают очень шустро, из-за чего и сыр-бор, собственно.
Отложенные вычисления не предлагайте — специфика задачи не позволяет.

Спасибо.
Re: Персистентные регулярки
От: uzhas Ниоткуда  
Дата: 15.04.11 06:15
Оценка:
Здравствуйте, okman, Вы писали:

O>Всем привет.


O>Есть ли где-то такие регулярки для C++, чтобы их можно было скомпилировать, а

O>затем в этом скомпилированном состоянии сбросить на диск для последующего
O>использования ?

мне кажется, что проще всего взять любую либу, которая компилит регулярки, скомпилить запрос и выданную структурку руками сериализовать на диск (придется поковыряться в потрохах самой либы)
наверняка, вы так пробовали. с какими проблемами столкнулись? я вижу центральную сложность — разобраться в потрохах
Re: Персистентные регулярки
От: uzhas Ниоткуда  
Дата: 15.04.11 06:28
Оценка:
Здравствуйте, okman, Вы писали:

O>Всем привет.


O>Есть ли где-то такие регулярки для C++

насколько сложные регулярки у вас? может, вам вообще легковесную либу найти (в одном .h), автомат которой несложно сериализовать?
Re: Персистентные регулярки
От: c-smile Канада http://terrainformatica.com
Дата: 15.04.11 06:35
Оценка: 4 (1)
Здравствуйте, okman, Вы писали:

Помнится это вот:
http://www.codeproject.com/KB/string/spencerregexp.aspx
компилирует RE в самодостаточный bytecode. Который можно сохранять как есть.
Re: Персистентные регулярки
От: Аноним  
Дата: 15.04.11 06:42
Оценка: 4 (1)
Здравствуйте, okman, Вы писали:

O>Всем привет.


O>Есть ли где-то такие регулярки для C++, чтобы их можно было скомпилировать, а

O>затем в этом скомпилированном состоянии сбросить на диск для последующего
O>использования ?

Когда то задавался этим вопросом, для саморазвития. Вроде, овчинка выделки не стоит, выигрыша нет.

По теме для pcre: http://www.manpagez.com/man/3/pcreprecompile.
http://stackoverflow.com/questions/4499808/how-to-save-serialize-compiled-regular-expression-stdregex-to-a-file
Re[2]: Персистентные регулярки
От: okman Беларусь https://searchinform.ru/
Дата: 15.04.11 08:56
Оценка:
Здравствуйте, uzhas, Вы писали:

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

U>наверняка, вы так пробовали. с какими проблемами столкнулись? я вижу центральную сложность — разобраться в потрохах

Да, так оно и есть (о потрохах).
Я использую boost::xpressive.

Есть база правил, описанных регулярными выражениями.
Сами правила несложные, но их может быть достаточно много (полмиллиона — вполне).
Когда поступает запрос, нужно "прогнать" строку через эти правила для выяснения под
какое именно правило она попадает (match).
В xpressive копаться неохота, тем более что boost не стоит на месте, развивается —
кто знает что будет в следующей версии этой xpressive...
Re: Персистентные регулярки
От: MasterZiv СССР  
Дата: 18.04.11 09:01
Оценка: 6 (1)
On 14.04.2011 22:32, okman wrote:

> *Есть ли где-то такие регулярки для C++, чтобы их можно было скомпилировать, а

> затем в этом скомпилированном состоянии сбросить на диск для последующего
> использования ?*

Есть для этого ANTLR.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.