我正在尝试使用正则表达式替换文件中的文本(仅用protocol / domain /替换完整的url):

:%s/\(https\?:\/\/.*?\/\).*//gc
,甚至试图逃脱.*?量词?非贪婪量词如何在vim中转义?

评论

:help greedy将您带到正确的帮助主题。 :help regexp是描述Vim regex风格的帮助。

相关:如何使我的比赛在vim中变得不贪心?在堆栈溢出上。

#1 楼

Vim的regex对非贪婪版本的运算符具有特殊的语法(这很烦人,但您只需要记住它们):http://vimregex.com/#Non-Greedy

*的贪婪版本是\{-}。因此,只需将.*替换为.\{-}

:%s/\(https\?:\/\/.\{-}\/\).*//gc


#2 楼

我更喜欢将问题分为两个步骤:

/\v(https?):\/\/(.{-})\/.*        <-- Search
:%s,,Protocol: - Domain:,g    <-- Substitution


使用非常神奇的“ \ v”来避免许多反斜线,并引用最后一个搜索
来代替和更改替换定界符。所有这些更改使代码更具可读性。



#3 楼

您也可以使用[^\]+/.防止贪婪。 [^/]的意思是“匹配任何期望的/,并且+重复一次或多次。。这样我就不必逃避/了。

示例

假设您具有以下网址:

:%s!\v^(https?)\://([^/]+)/.*$!Protocol: \t Domain:!g


应用替换,您将得到以下信息:

http://academy.mises.org/courses/econgd/
http://academy.mises.org/moodle/course/view.php?id=172
http://acmsel.safaribooksonline.com/book/-/9781449358204?bookview=overview
http://acmsel.safaribooksonline.com/home
http://acordes.lacuerda.net/bebo__cigala/lagrimas_negras-2.shtml
http://acordes.lacuerda.net/jose_antonio_labordeta/albada.shtml
http://anarchitext.wordpress.com/category/new-middle-east/
https://courses.edx.org/courses/course-v1%3ADelftX%2BFP101x%2B3T2015/wiki/DelftX.FP101x.3T2015/resources-and-links/
https://cseweb.ucsd.edu/classes/wi11/cse230/lectures.html
https://developer.mozilla.org/en-US/docs/CSS
https://developers.google.com/edu/python
https://developers.google.com/structured-data/testing-tool/