LINUX.ORG.RU

Negative lookback & backreferences

 


1

2

Допустим, нужно перед каждым словом «трансденсканция», перед которым нет слова «трансценденентальная», вставить это слово. Инвентарь Vim включает negative lookback assertion:

/\(трансценденентальная \)\@<!трансденсканция

Но, поскольку соответствие негативное, первой группе соответствует пустая строка.

s/(трансценденентальная \)\@<!трансденсканция/\1 \2/

не изменяет текст. Хотелось бы найти другой способ кроме

s/(трансценденентальная \)\@<!трансденсканция/трансценденентальная \2/
★★★★

Нужно ли так усложнять? Если задача в том, чтобы выполнить преобразование, а не в том, чтобы задействовать при этом negative lookback assertion (что бы это ни значило), то я сделал бы как-то так:

s/\(трансценденентальная \)\?трансденсканция/трансценденентальная трансденсканция/g
grazor ★★
()
Ответ на: комментарий от grazor

Задача в том, чтобы не повторять в правой части s/// длинные слова. Они бывают длиннее и гораздо сложнее, чем в примере.

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