VIMでは:echo split('abcd123ef4ghij56k', '\d\+')
を実行するとリスト[abcd', 'ef', 'ghij', 'k']
の表現が出力されます。しかし、split()が返さなかったものを出力する動作を探しています。この場合は['123', '4', '56']
です。split()がVIMで返さなかったリストを取得するには
もちろん、ここのような簡単な例では、私が望むものを得るためにパターンを\D\+
に変更できます。しかし、パターンは関数の引数であるため、これは私の後ではありません。私はどのようにしてのパターンがのパターンであるかわからないと思います。
function! MatchMultiplePatterns(txt, re)
let l:result = []
let l:pos = match(a:txt, a:re)
while l:pos != -1
let l:matchedString = matchstr(a:txt, a:re, l:pos)
let l:result += [l:matchedString]
let l:pos = match(a:txt, a:re, l:pos + strlen(l:matchedString))
endwhile
return l:result
endfunction
しかし、私は、これはwhile
-loopと呼び出しが一致せずに()を2回可能であるべきと考えています。これは一般的なケースでは良い解決策がある場合
パターンに一致するすべてのテキストを取得したいですか? –
はい、すべて一致するパターンが1つのリストのリストとして、すべて一致するテキストのみです。 –
split()の対立はこれを説明する奇妙な方法です。私は、ほとんどの場合、 'split()'の "反対"は 'join()'だと言います。タイトルを明確にすると、より良い回答が得られる可能性があります。 –