C ++, Boost регулярное выражение, заменить значение функции совпадающего значения? - PullRequest
1 голос
/ 09 ноября 2009

В частности, у меня есть массив строк с именем val, и я хочу заменить все экземпляры "%{n}%" во входных данных на val[n]. В более общем смысле я хочу, чтобы значение замены было функцией значения совпадения. Это на C ++, поэтому я пошел с Boost, но если другая общая библиотека регулярных выражений соответствует моим потребностям, лучше сообщите мне.

Я нашел несколько решений .NET (C #, VB.NET), но я не знаю, смогу ли я использовать такой же подход здесь (или, если смогу, как это сделать).

Я знаю, что есть уродливое решение: имейте выражение в форме "(%{0}%)|(%{1}%)...", а затем используйте шаблон замены, например "(1?" + val[0] + ")(2?" + val[1] ... + ")".

Но я хотел бы знать, можно ли сделать то, что я пытаюсь сделать, более элегантно.

Спасибо!

1 Ответ

1 голос
/ 10 ноября 2009

Я не верю, что boost :: regex имеет простой способ сделать это. Самый простой способ, который я могу придумать, - это выполнить regex_search с использованием шаблона «(% {[0-9] +}%)», а затем выполнить итерацию по частичным совпадениям в возвращенном объекте match_results. Вам нужно будет создать новую строку, объединив текст между каждым совпадением (метод match_results :: position будет вашим другом здесь) с результатом преобразования подсовпадений в значения из вашего массива val.

...