Я хочу соответствовать 13/12/2015 (день, месяц, год в отдельности):
ASTA n° 30 | 13/12/2015 ore 10.00 | Arte Moderna & Contemporanea
С помощью этого Regex (PHP - preg_match):
/(\d{1,2})\D{1,4}(\d{1,2})\D{1,4}(\d{4}|\d{2})/imu
Я получил:
30 | 13/12
Но мне нужно 13/12/2015. Кажется, что Regex недостаточно жаден... Я знаю, что совпадение, которое я получил, возможно с моим Regex, но я хочу предпочесть \d {4} over\d {2} (в скобке последнего раунда).
EDIT: мне нужно, чтобы элементы \d {2} и \D {1,4} были более гибкими (есть такие даты, как 13.10.15 или 13.12.2015 и т.д.). Есть ли способ изменить порядок обработки двигателя регулярных выражений (от начала до конца)? Итак, он сначала будет соответствовать \d {4}, а затем \d {2} (месяц и день)?
Почему бы просто не просто: \d{2}\/\d{2}\/\d{4}
(нажмите regex для демонстрации).
У вас есть цифры, косая черта, две цифры, снова косая черта и 4 цифры.
Если вы хотите добавить поддержку для одиночных цифр и, например, дефисы, вы можете сделать это: \d{1,2}[\ / -]\d{1,2}[\ / -]\d{4}
(опять же, нажмите regex для демонстрации).
Обновляется в соответствии с запросом OP, который также соответствует двухзначному году:
(\d{1,2}[\ / -]\d{1,2}[\ / -](?:\d{4}|\d{2}))
DEMO
Это регулярное выражение добавляет чек, если он не может найти 4-значный год, он будет искать только 2 цифры.
Редактирование 2: я немного сократил регулярное выражение - теперь дата и месяц находятся в одной группе неперехватных регулярных выражений, но будут совпадать только в том случае, если в этом регулярном выражении есть два случая. С дальнейшим ado регулярное выражение:
((?:\d{1,2}[\ / -]){2}(?:\d{4}|\d{2}))
ДЕМО
использование
(\ D {1,2}) \/(\ d {1,2}) \/(\ d {4} |\д {2})