我只是试图(天真地)将一个用于上层的宏组合成一组任意SQL保留字。
:nnoremap <leader>c :s/\(\<use\>\)\|\(\<create\>\)\|\(\<select\>\)\|\(\<update\>\)\|\(\<delete\>\)\|\(\<not\>\)\|\(\<null\>\)\|\(\<unique\>\)\|\(\<constraint\>\)\|\(\<references\>\)\|\(\<join\>\)\|\(\<on\>\)\|\(\<inner\>\)\|\(\<outer\>\)\|\(\<left\>\)\|\(\<group\>\)\|\(\<order\>\)\|\(\<having\>\)\|\(\<by\>\)/\U&/g<CR>
宏被写入我的.vimrc,它加载正常。但是当我运行宏时,Vim会吐出一些错误:
E872: (NFA regexp) Too many '('
E51: Too many \(
E476: Invalid command
我一直在寻找,但没有发现任何迹象表明正则表达式有限制。我对这些错误的最佳解读是,我没有正确地逃避某些事情,但我无法找到它。
我是否在这里超过了正则表达式的限制?
答案 0 :(得分:4)
你只能拥有捕捉模式\ 1 .. \ 9。如果您需要更多分组,但不需要全部捕获它们,则可以使用\%(pattern\)
语法的非捕获组:
/abc\%(def\)ghi/
答案 1 :(得分:2)
这与正则表达式中字符的限制无关,它与正则表达式中的组数限制有关。
Vim可以处理最多10个正则表达式组,(Database --> Querying
),我没有计算你的代码,但你的正则表达式中你应该有10个以上的组。
常量(10)在\0....\9
https://github.com/vim/vim/blob/0b9e4d1224522791c0dbbd45742cbd688be823f3/src/regexp.h#L22
它用于验证用户的正则表达式,如下所示:
https://github.com/vim/vim/blob/af98a49dd0ef1661b4998f118151fddbf6e4df75/src/regexp.c#L1539