正则表达式:匹配文本方括号和方括号中包含的内容然后搜索和替换

时间:2012-01-11 04:22:47

标签: regex vim replace

我正在尝试匹配(a)并替换(b)以下事件:

array[0] -> atoi(array[0])
array[1] -> atoi(array[1])
...
array[i+1] -> atoi(array[i+1])

依旧......

(a)我无法使用以下表达式匹配array\\[(.\*?)\\]array\\[.\*?\\]array\\[*\\]

我可以将括号中的单个字符匹配项与array\\[.\\]进行匹配,另外还可以使用array\\[.*\\]

在一行中匹配多个匹配项

(b)在工作比赛结束后我认为s/"MATCHING REGEX"/atoi(array\[\1\])/g应该有效,但尝试使用array\\[.\\]导致atoi(array[])

3 个答案:

答案 0 :(得分:4)

这个怎么样?

:s/\<array\[[^\]]\+\]/atoi(\0)/

答案 1 :(得分:1)

您可以使用:

:s/array\[.\{-}\]/atoi(&)

答案 2 :(得分:0)

嗯,你并没有真正说出你正在使用什么RegEx引擎,但如果我不得不猜测这个特定的引擎可能不喜欢“非贪婪”的限定符。因此,让我们尝试使用正则表达式来消除非贪婪的限定符并使用“不关闭方括号”的字符类来代替非贪婪的“。*?”。试试这个:

阵列[([^]] *)]