我有文字:
alpha/beta/gamma
alpbeta/gamma
alpha/beta/gamma
This is an example. Test1,Test2,Test3
alpha/beta/gamma
This is an example.
Test1,Test2,Test3
我想在每个单词的斜杠(/)之间添加*,但是我没有找到我的模式…
我命令:
:%s//(.*?)//*/g
result I want:
alpha/beta*/gamma
alpbeta/gamma
alpha/beta*/gamma
This is an example. Test1,Test2,Test3
alpha/beta*/gamma
This is an example.
Test1,Test2,Test3
可以使用
:%s//[[:alpha:]]+ze//&*/g
或者
:%s//[^/]*ze//&*/g
这里,模式是/[[:alpha:]]+ze/
:
/[[:alpha:]]+
-消费部分:/
然后一个或多个字母[^/]*
-/
以外的零个或多个字符ze/
-被消耗的文本结束,然后必须跟随/
字符(就好像它是普通NFA正则表达式中的(?=/)
正向向前看)。
替换为代表整个匹配值的&
和*
字符。
g
标志替换所有出现的标记。
根据您的示例,看起来您希望*
在/
最后出现在该行之前。
我会去记录一个宏,做$F/i*^VESCj
(其中^V
是CTRL+V和ESC
是ESC。
这意味着转到行尾,向后找到/
,进入插入模式,输入*
,返回正常模式,顺行。
您可以将其记录为宏,并使用:%normal @x
(如果您在x
上录制)等内容回放整个文件
Vim使用自己的正则表达式方言,其中:
.*?
中的*?
没有意义,- 分组括号必须用反斜杠转义,
- 和其他方言的各种不同之处…
现在,你的模式应该匹配:
- a斜杠,
/
, - 后接左括号
(
, - 后接0个或多个字符,
.*
, - 后加问号,
?
, - 后接右括号
)
, - 后面跟着另一个斜杠,
/
,
在你的样品中找不到。
参见:help perl-patterns