Что не так с моим REGEX при использовании редактора VI? - PullRequest
2 голосов
/ 24 октября 2009

У меня есть текстовый документ так:

<table width="10">
</table>

Я открываю документ с помощью редактора VI. Я хочу заменить все экземпляры width = "somenumber" ни на что. Я выдаю эту команду в редакторе VI:

:0,$s/width="[\d]+"//gc

В.И. говорит, что образец не найден. Я также попробовал это, и это не работает:

0,$s/width="[0-9]+"//gc

Этот ниже работал:

:0,$s/width="\d\d"//gc

Что не так с моими первыми двумя выражениями?

Ответы [ 3 ]

5 голосов
/ 24 октября 2009

В вашем регулярном выражении две ошибки!

Сначала используйте \d без [] с. Вы, вероятно, смешаете его с классами символов, такими как :alpha:, :digit: и т. Д.

Во-вторых, убегите от знака +. По умолчанию вы должны избегать его.

Итак, ваше регулярное выражение будет:

:0,$s/width="\d\+"//gc

И, пожалуйста, прочитайте справку перед публикацией в stackoverflow:

:h :s

Вы также можете быть заинтересованы в этом разделе справки:

:h magic 
1 голос
/ 24 октября 2009

Вы хотите:

:0,$s/ width="\d\+"//gc

\d не распознается внутри класса символов (точнее, он распознается как буква d), а + без обратной косой черты не распознается как метасимвол BRE vim. Вы также, вероятно, хотите удалить пробел до width.

0 голосов
/ 24 октября 2009

Это будет работать только с шириной в две цифры, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...