Regex заменить / искать, используя значения / переменные в тексте поиска

2

Что такое синтаксис регулярного выражения для использования части согласованного выражения в последующей части поиска?

Итак, например, если у меня есть:
"{marker = 1} некоторый текст {/marker = 1}"
или
"{marker = 2} некоторый текст {/marker = 2}"

Я хочу использовать первую цифру, найденную в шаблоне, чтобы найти вторую цифру. Итак, в "{marker = 1} {marker = 2} некоторый текст {/marker = 2} {/marker = 1}"
регулярное выражение будет соответствовать 1, а затем 2.

До сих пор я придумал {marker = (\ d)} (. *?) {/marker = (\ d)}, но не знаю, как указать второй \d для ссылки на значение найденный в первом \d.

Я делаю это на С#.

Теги:

2 ответа

2
Лучший ответ

попробовать:   {marker=(\d)}(.*?){/marker=(\1)}

1

Нумерованная обратная ссылка - это просто \n, поэтому\1 должен работать здесь:

Regex re = new Regex(@"\{marker=(\d)\}(.*?)\{/marker=(\1)\}");
// expect to work
Console.WriteLine(re.IsMatch(@"{marker=1}some text{/marker=1}"));
// expect to fail (end marker is different)
Console.WriteLine(re.IsMatch(@"{marker=1}some text{/marker=2}"));
Сообщество Overcoder
Наверх
Меню