Pull to refresh

Comments 23

UFO just landed and posted this here
Если я правильно понял документацию (под рукой нет ни библиотеки, ни даже компилятора C++), то как-то так:

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

replacement << setfill('0') << setw(5) << lineno++;
UFO just landed and posted this here
Да, этого с ней сделать не получится. Все функции замены (и проверки) в библиотеке принимают фиксированные строковые значения и вызов сторонних функций или 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 нереализуемы принципиально. С ними о линейности требований к ресурсам можно забыть.
Sign up to leave a comment.

Articles