Регулярное выражение для формата больше, чем дата xx-xx-xxxx - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть один текстовый файл с 40000 записей.Мне нужно найти все элементы, начиная с 1 октября 2011 года. Формат: 01-10-2011. Как это сделать с помощью регулярного выражения?

1 Ответ

2 голосов
/ 17 февраля 2012

Это, вероятно, не должно быть сделано, но это может быть сделано:

([0-3][2-9]|[1-3]1)-10-2011|[0-3][0-9]-1[12]-2011|[0-3][0-9]-[01][0-9]-201[2-9]

Предполагается, что все даты являются ДД-ММ-ГГГГ и действительны, и вам не нужно находить даты более поздние, чем в 2019 году, для которых они могут быть адаптированы при необходимости.

Протестировано в Dreamweaver CS5, и я сомневаюсь, что со временем они сильно изменили свой движок регулярных выражений. Notepad ++ regex не поддерживает панель, которая оказалась довольно вредной.

Чтобы понять, почему это работает, у нас есть 3 варианта сопоставления верхнего уровня, разделенных чертой (|). Первая альтернатива:

 ([0-3][2-9]|[1-3][0-9])-10-2011

Что соответствует любым датам в октябре 2011 года с DD, не равным 01. Для поддержки 02-31 на уровне символов необходима группа подстрок ([0-3][2-9]|[1-3]1). Левая сторона этого столбца соответствует 02-39, пропуская 11, 21 и 31, а правая сторона принимает именно эти пропуски.

Следующая альтернатива верхнего уровня:

[0-3][0-9]-1[12]-2011

Что соответствует любому дню в ноябре и декабре 2011 года.

И последняя группа:

[0-3][0-9]-[01][0-9]-201[2-9]

Что соответствует любому дню любого месяца в 2012-2019 гг.

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