Ответ 1
Здесь строка поиска.
/abc \(defg\)\@!
Концепция, которую вы ищете, называется отрицательным ожиданием. Попробуйте это в vim для получения дополнительной информации:
:help \@!
Довольно простой вопрос, я пытаюсь написать регулярное выражение в Vim, чтобы соответствовать любой фразе, начинающейся с "abc "
, за которой следует только что "defg"
.
Я использовал "[^defg]"
для соответствия любому одиночному символу, отличному от d, e, f или g.
Моим первым инстинктом было попробовать /abc [^\(defg\)]
или /abc [^\<defg\>]
, но ни один из них не работает.
Здесь строка поиска.
/abc \(defg\)\@!
Концепция, которую вы ищете, называется отрицательным ожиданием. Попробуйте это в vim для получения дополнительной информации:
:help \@!
предшествует или следует?
Если что-то начинается с "abc", а не (немедленно), а затем "defg" , вы хотите bmdhacks".
Если все начинается с "abc", а не (сразу) предшествует "defg" , вам нужен отрицательный lookbehind:
/\%(defg\)\@<!abc /
Это будет соответствовать любому событию "abc", если оно не является частью "defgabc". Подробнее см. :help \@<!
.
Если вы хотите совместить 'abc', если он не является частью 'defg. * abc', просто добавьте .*
:
/\%(defg.*\)\@<!abc /
Совпадение "abc" только в строках, где "defg" не встречается, похоже:
/\%(defg.*\)\@<!abc \%(.*defg\)\@!/
Хотя, если вы просто делаете это для подстановки, вы можете сделать это проще, объединив :v//
и :s//
:%v/defg/s/abc /<whatever>/g
Это заменит '<whatever> ' для 'abc' на всех строках, которые не содержат 'defg'. Подробнее см. :help :v
.
Здесь мы идем, это волосатый:
/\%(\%(.\{-}\)\@<=XXXXXX\zs\)*
(замените XXXXXX словом поиска). Это будет искать все, что не содержит XXXXXX. Я предполагаю, что если бы вы сделали:
/abc \%(\%(.\{-}\)\@<=defg\zs\)*
Это может работать так, как вы этого хотите. Надеюсь, это поможет немного!
/abc\[^ d] [^ e] [^ f] [^ g]
Это довольно громоздко для больших слов, но работает как прелесть.