ngelik
@ngelik

Регулярные выражения и нумерованные обратные ссылки

Добрый день.

В регулярных выражениях есть такая вещь как нумерованные обратные ссылки.
Например есть дата
26-4-03 или 26/04/03 или 26.4.3

С помощью нумерованных обратных ссылок это можно записать так:
\b\d{1,2}(\/|\.|\-)\d{1,2}\1(\d{1,2))\b

А как можно записать рабочий вариант что-то наподобие такого выражения?
\b(\d{1,2})(\/|\.|\-)\1\2\1\b
  • Вопрос задан
  • 3837 просмотров
Решения вопроса 1
UZER2006
@UZER2006
ngelik, конкретно с обратными ссылками так, как вы хотите – нельзя.
Не усложняете ли вы задачу? Для простого парсинга даты нет смысла строить сложные регулярные выражения.
Посмотрите этот пост. С помощью DEFINE можно что-то похожее сделать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Ваша регулярка выглядит вполне рабочей regexr.com?34mm4
Что с ней не так?
Ответ написан
UZER2006
@UZER2006
Обратные ссылки подставляют найденное значение, а не паттерн. Может, вы именно в этом ошиблись?
\b(\d{1,2})(\/|\.|\-)\1\2\1\b

В таком виде записать не получится. Под это выражение подойдут только строки, где все 3 числа совпадают.
Ответ написан
@Placido
Не знаю, есть ли такое в .NET, но в PCRE можно использовать ссылки вида (?n), где n — номер подмаски:
\b(\d{1,2})(\/|\.|-)(?1)\2(?1)\b
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы