我写了一个vim的正则表达式,它应该找到文件名。它看起来像那样:
let fileMatch = '\([-_a-zA-Z0-9]\+\.\)\+[a-zA-Z0-9]\+'
let fileName = matchstr(
\ a:input_line,
\ fileMatch
\ )
我们假设a:input_line
的值为:
(test/the/plugins.vim:13:2) (test/the/pluginsies.vim:13:2)
我的目标是在数组中添加plugins.vim
和pluginsies.vim
。
我将在后面解决这个数组。
现在,如果我回显fileName,我只会得到第一个匹配:plugins.vim
。
那么,如何在数组中保存多个匹配?
let fileMatch = '\([-_a-zA-Z0-9]\+\.\)\+[a-zA-Z0-9]\+'
let fileName = matchstr(
\ a:input_line,
\ fileMatch
\ )
let result_list = map(split(a:input_line, fileMatch . '\zs'),'matchstr(v:val, fileMatch)')
答案 0 :(得分:1)
matchstr()
只会返回第一场比赛。您可以使用循环来获取所有匹配的字符串。
我注意到你会忽略带空格的文件名。所以这个单行可能有助于在列表中获得所有匹配的字符串:
let result_list = map(split(a:input_line),'matchstr(v:val, fileMatch)')
它将返回:
['plugins.vim', 'pluginsies.vim']