Regex: сопоставить текстовые квадратные скобки и то, что содержится в квадратных скобках, затем найти и заменить - PullRequest
2 голосов
/ 11 января 2012

Я пытаюсь сопоставить (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 ]

4 голосов
/ 11 января 2012

Как насчет этого?

:s/\<array\[[^\]]\+\]/atoi(\0)/
1 голос
/ 11 января 2012

Вы можете использовать:

:s/array\[.\{-}\]/atoi(&)
0 голосов
/ 11 января 2012

Ну, вы на самом деле не говорите, какой движок RegEx вы используете, но, если бы я догадался, возможно, именно этому движку не нравится "не жадный" квалификатор.Итак, давайте попробуем регулярное выражение, исключающее некожадный квалификатор и использующее класс символов «не закрывающая квадратная скобка» вместо негадального «. *?».Попробуйте вместо этого:

массив [([^]] *)]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...