vim найти все _, кроме \ sm_ <какое-нибудь допустимое имя> - PullRequest
0 голосов
/ 04 ноября 2018

Какое регулярное выражение я могу использовать в vim, чтобы найти все подчеркивания, кроме тех, которые используются в следующем:

m_<some variable name>

1 Ответ

0 голосов
/ 05 ноября 2018

Предполагая, что <some variable name> может состоять только из буквенно-цифровых символов (но не _), мы можем сделать отрицательное утверждение с обратной стороны (:help /\@<!) для \<m (т.е. ключевое слово не должно начинаться с m до _)

/\%(\<m\)\@<!_/

Все становится сложнее, если <some variable name> также может содержать подчеркивания. Затем мы должны исключить в той же позиции (:help /\@!) совпадения до подчеркивания (:help /\@<=) \<m и \<m_\w* и \<m_\w*_\w* и т. Д. оканчивающийся на \w*\>:

/\%(\%(\<m\%(_\w*\)*\)\@<=_\w*\>\)\@!_/

Это также исключит m_ самого себя. Чтобы исправить это, мы должны различать (через две ветви) исключение совпадений с подчеркиванием позже в \<m_\w* и совпадений сразу после \<m, которые затем должны иметь \w\+, чтобы исключить его:

/\%(\%(\<m\%(_\w*\)\+\)\@<=_\w*\>\|\%(\<m\)\@<=_\w\+\>\)\@!_/
...