Тема: vim, ліниві квантифікатори в регулярних виразах

Як у Vim написати регулярний вираз, який знаходить всі рядки типу "<b>something</b>",  але при умові, що всередині тега присутній хоча б один символ '~'.
А ще вираз має бути лінивим, тобто не має захоплювати таке "<b>something<\b>something<\b>something<\b>".

2 Востаннє редагувалося koala (08.09.2021 14:59:10)

Re: vim, ліниві квантифікатори в регулярних виразах

\<b\>.\{-}~.\{-}\</b\>

якщо вірити http://vimregex.com/ і припустити, що something - це не конкретний текст запиту.
П.С. Це зветься не "лінивий", а "нежадібний".

Подякували: Володимир Бойко1

Re: vim, ліниві квантифікатори в регулярних виразах

koala написав:
\<b\>.\{-}~.\{-}\</b\>

якщо вірити http://vimregex.com/ і припустити, що something - це не конкретний текст запиту.
П.С. Це зветься не "лінивий", а "нежадібний".

Дякую. Так я пробував. Захоплює вкладені теги.

Re: vim, ліниві квантифікатори в регулярних виразах

По суті мені треба замінити всі "<b>something</b>" на "<someanothertag>something</someanothertag>", але тільки при умові, що всередині тега, серед усього іншого, є хоча б один символ "~". Може я не в тому напрямку копаю і є якийсь простіший спосіб.

5

Re: vim, ліниві квантифікатори в регулярних виразах

Тоді ви неправильно написали в умові, що не має захоплюватися.

6

Re: vim, ліниві квантифікатори в регулярних виразах

Ну і взагалі парсити HTMLі регексами - то не тойво.

Подякували: leofun011

7

Re: vim, ліниві квантифікатори в регулярних виразах

Сам вираз

\<b\>([^\<\>\~]*\~[^\<\>]*)\<\/b\>

Приклад для користання

:g/\<b\>([^\<\>\~]*\~[^\<\>]*)\<\/b\>/