Как я могу сделать не жадный запрос regex в notepad++?

Я пишу с латексом и случайно написал cite[] вместо cite{}. Я мог бы просто пойти на весь документ вручную, но я хочу знать, как это сделать в Notepad++ с помощью регулярных выражений.

Я изначально пробовал cite[(.*)] и заменить на cite{} который работает для простых случаев, таких как

cite[hello world] blah blah 

однако, если в абзаце есть две или более цитат, он соответствует всем из них. Так, например,

cite[aaa]cite[bbb] something here cite[ccc]

матчи в целом линия

как я могу получить не жадный матч, чтобы вышеуказанная строка была сопоставлена как 3 отдельных матча и результат команды replace должен дать мне

cite{aaa}cite{bbb} something here cite{ccc}

2 ответов


использовать хочет (Он же не жадный) выражение:

\cite\[(.*?)\] 

добавление вопросительного знака изменяет .* от жадного (по умолчанию) до неохотного (не жадного), что означает, что он будет потреблять как можно меньше, чтобы найти совпадение, что означает, что он не пропустит несколько поисковых терминов, таких что он соответствует с помощью открытой квадратной скобки, если первый цитировать и закрывающая квадратная скобка последнего цитировать.

посмотреть live demo of это регулярное выражение, работающее с образцом в вопросе.


лучше использовать более точное выражение в первую очередь:

\cite\[([^[\]]*)\]

вы должны использовать Notepad++ версии 6 или выше (они обновлены до PCRE regex engine на V6).