Предполагая, что <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\+\>\)\@!_/