我试图匹配仅包含一个/
的文件中的行,所以我想我可以搜索不包含/
的任何长度的字符串,然后完全匹配一个/
,然后匹配另一个不包含/
的任意长度的字符串,最后以换行符结束。
我对此的尝试是[^/]*/[^/]*$
。但是,这似乎不起作用。
我继续尝试仅匹配此模式的一部分,然后开始尝试匹配不包含/
的任何长度的字符串,我认为该字符串应该只是[^/]*
,但这是行不通的。 / p>
我对regex非常熟悉,但不熟悉在vim中使用它,因此,首先,我是否因为使用vim而将regex输入错误?其次,如果我输入的vim是正确的,那么我的正则表达式有什么问题?
答案 0 :(得分:2)
您可以使用
搜索与模式匹配的所有行:g/^[^\/]*\/[^\/]*$
请注意,g
将匹配所有匹配项,此处需要转义反斜杠,并且模式匹配
^
-一行的开头[^\/]*
-除/
以外的0多个字符\/
-一个/
[^\/]*
-除/
以外的0多个字符$
-行尾。请注意,[^\/]*
(带括号的表达式)与Vim中的换行符不匹配,这与Sublime Text 3或Notepad ++之类的文本编辑器不同,因此,它将完全符合您的需求。
请注意,如果您选择另一个定界符,则可以避免转义反斜杠。参见Vim regex reference:
通常,您需要在包含UNIX文件路径的文本中执行S&R-内部带有斜杠(
"/"
)的文本字符串。因为S&R命令使用斜杠进行模式/替换分隔,所以您必须转义模式中的每个斜杠,即,对模式中的每个"\/"
使用"/"
...为避免这种所谓的“反斜杠炎”,可以在S&R中使用不同的分隔符。
因此,您也可以将:g~^[^/]*/[^/]*$~
或:g#^[^/]*/[^/]*$#
用作Amadan suggests。