Помогите с регуляркой

topy
На сайте с 28.03.2006
Offline
142
458

Друзья, помогите пожалуйста с регуляркой.

нужно из даты такого формата: 2011.13марта

сделать дату нормального (мускульного формата) YYYY-MM-DD

Думаю тут нужно как-то год переставить в конец (остальное в принципе можно автозаменой исправить).

Ну и еще вопрос: встречаются даты такого формата: 2011.март

И даже просто 2011г.

Спасибо всем откликнувшимся.

Новости коротко и ясно (https://subnews.ru)
cims
На сайте с 15.11.2005
Offline
60
#1

Регулярное выражение которое находит последовательность

(\d{4})\.(\d{2})([а-я]+)$

Вывод последовательности

\1-\3-\2

Замена зависит от языка на котором реализован парсер.

L
На сайте с 07.12.2007
Offline
351
#2
cims:
(\d{4})\.(\d{2})([а-я]+)$

[а-я] некорректно, русские буквы не идут подряд, как латинские.

ТС, если месяц будете заменять автозаменой, то регулярка не нужна, можно сделать что-то вроде:

implode('', (array_reverse( explode('.'), '2011.13марта') )

topy
На сайте с 28.03.2006
Offline
142
#3

cims, Ladycharm, спасибо большое! наставили меня на правильный путь.

Сделал так: $new_date=implode('', (array_reverse( explode('.', $date)) ));

т.к. с [а-я] и правда были проблемы.

Еще раз благодарю!

L
На сайте с 07.12.2007
Offline
351
#4
topy:
cims, Ladycharm, спасибо большое! наставили меня на правильный путь.
Сделал так: $new_date=implode('', (array_reverse( explode('.', $date)) ));
т.к. с [а-я] и правда были проблемы.
Еще раз благодарю!

Честно говоря, cims-овский путь более стильный, строгий и правильный, вот его рабочая регулярка:

(\d{4})\.(\d{2})(.+)$

(.+)$ - выгрести не менее одного любого символа до конца строки

или полный код:

$new_date = preg_replace("/(\d{4})\.(\d{2})(.+)$/", "\$1-\$3-\$2", $old_date);

А мой - как проще, если сильно не заморачиваешься красотой кода.

topy
На сайте с 28.03.2006
Offline
142
#5

Вот теперь то, что надо!!!

Спасибище большое...

Подправил еще чутка. Получилось вот так:

$new_date = preg_replace("/(\d{4})\.(\d{1,2})(.+)$/", "\$1-\$3-\$2", $old_date);
S1
На сайте с 13.03.2008
Offline
49
#6

Кириллица, если юникод(UTF-8): "/[а-яА-Я]/u"

Дизайн сайтов (UI/UX), логотипов, баннеров и прочего... (/ru/forum/770062)
L
На сайте с 07.12.2007
Offline
351
#7
smart1k:
Кириллица, если юникод(UTF-8): "/[а-яА-Я]/u"

Принимается :) про UTF-8, что-то я и не подумала. Там, действительно, коды буковок подряд идут.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий