regex - Vimscript : get all matches of a regex over a string

标签 regex vim

在 vimscript 中,我们有 substitute将接受标志的函数 'g'替换所有出现的情况。

有没有办法获得所有匹配的字符串?

例如,使用字符串 'x y z' ,我们可以使用 substitute('x y z', '[a-z]', 'abc', 'g')将其更改为 abc abc abc .

但是,有没有办法获得单个字符['x', 'y', 'z'] ?

我知道我们可以使用 match()获取匹配的位置,以及 matchstr()获取匹配的字符串。但是如果我想遍历所有匹配项,我必须调用这两个函数,我认为这不是有效的方法。

那么有没有什么有效的方法可以在 vimscript 中获取字符串的所有匹配项?

最佳答案

您可以使用带有子替换表达式的替换来捕获所有匹配项。

let str = 'a b c'
let lst = []
call substitute(str, '[a-z]', '\=add(lst, submatch(0))', 'g')

如需更多帮助,请参阅:
:h sub-replace-expression
:h substitute
:h add()
:h submatch()

关于regex - Vimscript : get all matches of a regex over a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34056600/

相关文章:

python - 搜索文件中单词代码的输出错误

C# 正则表达式捕获捕获组后的单词

java - 安卓:NullPointerException 错误

html - 删除包含模式的 HTML 元素

windows - Windows 上的 gVIM : execute buffer and paths with spaces

vim-重新映射>> <<(缩进命令)

vim - 如何动态创建 if 语句?

json - Scala - 如何获取 Json 字段的最大值?

c++ - 我如何使用 vim cindent 实现这一点?

regex - 数字范围的 Vim 正则表达式 - 不工作