[regexp] вопрос
sed 's/abc \(\([^x]\|x[^y]\|xy[^z]\).*\)/abc prefix_\1/'Полноценного отрицания в классических regexp-ах быть не должно. Но "не следует недооценивать перловые regexp-ы" (С)


Можно сделать в два прохода.
s/abc (?!xyz.*)/abc prefix_$1/g;
строка выражения и время выполнения растут экспоненциальноДля тебя слово "экспоненциально", просто означает "нелинейно"? Как нетрудно видеть трезвым взглядом строка растет квадратично.

s/abc (?!xyz.*)/abc prefix_$1/g;В чем такое работает то? В vim-е и в sed-е не работает


Оставить комментарий
maxiim9
как написать регулярное выражение с отрицанием подстроки?то есть надо, чтобы подстроки вида "abc (.*)" заменялись на "abc prefix_\1", но при условии, что подстрока после "abc " не начинается с "xyz".
Пример:
1) "abc abc" => "abc prefix_abc"
2) "abc xyz wty" => "abc xyz wty"
3) "abc zyx wty" => "abc prefix_zyx wty"