Как стать автором
Обновить

Комментарии 23

НЛО прилетело и опубликовало эту надпись здесь
Если я правильно понял документацию (под рукой нет ни библиотеки, ни даже компилятора C++), то как-то так:

std::string text("multiline\ntext");
int lineno = 2;
std::ostringstream replacement;
replacement << "sprintf '%05d ', " << lineno++;
re2::RE2::GlobalReplace(&text, "^", replacement.str());
НЛО прилетело и опубликовало эту надпись здесь
А, тьфу ты, не выполнит, конечно. В любом случае, это отличие плюсов от перла, регекспы не меняются в обоих случаях. Вот:

replacement << setfill('0') << setw(5) << lineno++;
НЛО прилетело и опубликовало эту надпись здесь
Да, этого с ней сделать не получится. Все функции замены (и проверки) в библиотеке принимают фиксированные строковые значения и вызов сторонних функций или callback'и на каждую замену не поддерживают.
Весьма интересно. Но надо понимать, что линейное время поиска и расход памяти даются далеко не даром: принципиально не позволяют реализовать ряд фич вроде сверхжадных квантификаторов, опережающих и ретропроверок и тем более рекурсий и обратных вызовов. Плюс ряд возможностей вроде сохраняющих скобок и квантификаторов с указанным большим числом повторов весьма дороги в реализации.
спасибо, Кэп!
В TCL гибридный механизм, который работает скорее как DFA, нежели NFA.
Да, вы правы, в той же статье Tcl вспоминают в контексте DFA, а не NFA. Я поправил пост.
ЕМНИП там DFA ищет образец целиком, а потом на него натравливается NFA. Т.е. с точки зрения расхода ресурсов это все-таки NFA, в котором DFA-дополнение используется в целях оптимизации
Но работает он с DFA-скоростью, т.е. в любом случае, есть ли совпадение или нет, он требует одинаковое время для поиска.
Нет — DFA-скорость при возможности достигается, но в общем случае не гарантируется. Главное преимущество чистого DFA для гугла (не надо думать об оптимизации самого регэкспа) в этом случае не реализуется.
Вау! 2010 год, а плюс-плюсники открыли для себя регулярные выражения
Вы, как я понял, не пишите на плюсах, не понимаете о чём идёт речь, так зачем холиварить?!
Просто появилась ещё одна либа для регэкспов, не более
Ваша логическая цепочка обрывается на первой половине предложения. Писал, теперь вот по таким постам не жалею, что слез. Спасибу автору.
Странно, что в сырцах есть как файл nfa.cc так и dfa.cc, таки решение гибридное, если судить по коду в re2.cc.
Тогда нужны точные критерии, когда подрубается NFA (подозреваю, что при использовании сохраняющих скобок), иначе слова о линейном потреблении ресурсов останутся только словами.
Почитал только что список возможностей — подожду использовать, пока не сделают обратные ссылки и опережающую \ ретроспективную проверки. Никто не тестил на скорость относительно PCRE?
вы статью читали? Там по ссылкам есть тестирование скорости относитлеьно PCRE
Прошу прощенья, не нашел с первого раза :)
Если кому-то интересно — сравнение тут.
Обе эти фичи на DFA нереализуемы принципиально. С ними о линейности требований к ресурсам можно забыть.
А жаль!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации