'/(а)?(?(1)м|п)/'
найдет
мам,пап
Подмаски:
\0 - ам, п
\1 а
Но то же самое можно записать проще:
'/(a)м|п/'
найдет
мам,пап
Все совпадает, даже возвращаемые подмаски -
\0 - ам, п
\1 а
Вопрос, в чем смысл?
'/(а)?(?(1)м|п)/'
мам,пап
\0 - ам, п
\1 а
'/(a)м|п/'
мам,пап
\0 - ам, п
\1 а
^(?x)
# --------------
# годы
# --------------
(?!0{4}) # не 0000
(?:
(?: # високосный год:
\d{2}(?!00)((?:[02468][048])|(?:[13579][26])) # \1 год, который делится на 4, но не век
| # или
(?1)00 # номер века, который делится на 400
)
|
( # \2 не високосный:
\d{4} # любой другой, кроме номеров столетий
)
)
\.
# --------------
(?: # месяцы
# --------------
(02) # \3 февраль
|
(0[469]|11) # \4 с 30 днями
|
0[13578]|10|12 # с 31 днями
)
\.
# --------------
# дни
# --------------
(?!00) # не 00
(?(3)
(?!30|31) # если это февраль, исключаем 30 и 31 числа
(?(2)(?!29)) # если это к тому же невисокосный год, исключаем 29 число
|
(?(4)(?!31)) # если это месяц с 30 днями, исключаем 31 число
)
([0-2][0-9]|30|31)$ # все возможные дни (месяц с 31 днем)
1352.01.01
2000.02.29
2004.08.30
2003.01.01
2001.02.29
1989.04.31
2040.02.29
2010.13.05
2011.11.32
0001.01.01
2100.02.30
2000.02.29
2100.02.29
2100.02.28
2100.02.05
2004.02.30
2004.02.29
2004.02.28
2100.02.05
2001.04.31
0400
160044.77
1700
210.6776833
Цитата (Placido @ 12.12.2012 - 20:12) |
хотел сделать его понятным |
Цитата (Placido @ 12.12.2012 - 20:12) |
К тому же, ваши не работают в Notepad++ |