Показать сообщение отдельно
  #1 (permalink)  
Старый 03.04.2015, 15:47
Новичок на форуме
Отправить личное сообщение для ibred Посмотреть профиль Найти все сообщения от ibred
 
Регистрация: 05.09.2012
Сообщений: 4

Regex. Нужна помощь с условием.
Здравствуйте!
У меня есть список таких строк:
Код:
id:1111111111,first_name:Misha,last_name:Razlivakhin,sex:2,bdate:19.4
id:1111111111,first_name:Степан,last_name:Семёнов,sex:2,bdate:22.1.1990
id:1111111111,first_name:Леха,last_name:Краснов,sex:2,bdate:27.3.1991
id:1111111111,first_name:Владислав,last_name:Ермаков,sex:2,bdate:21.11.1991
id:1111111111,first_name:Владимир,last_name:Смолянинов,sex:2,bdate:6.3,hidden:1
id:1111111111,first_name:Алексей,last_name:Победоносцев,sex:2,bdate:12.7.1990,hidden:1
id:1111111111,first_name:Алексей,last_name:Кифлюк,sex:2,bdate:31.12.1994,hidden:1
id:1111111111,first_name:Руслан,last_name:Чубаков,sex:2,bdate:26.6.1988

id:000000000,first_name:Сергей,last_name:Журавлев,deactivated:deleted,sex:2
id:000000000,first_name:Денис,last_name:Коптев,sex:2,bdate:3.7.1984
id:000000000,first_name:Антон,last_name:Коптев,sex:2,bdate:3.7.1980
id:000000000,first_name:Анна,last_name:Севастьянова,sex:1,bdate:31.12.1994,hidden:1
id:000000000,first_name:Василиса,last_name:Олина,sex:1,bdate:26.6.1988
id:000000000,first_name:Донна,last_name:Романова,sex:1,bdate:3.7.1984
Мне необходимо взять из этого списка регуляркой строки содержащие:
1. "sex:2"
2. И дату рождения такого плана: если указан год, то берем строку только в том случае, если это 1985-1997. Если год не указан - тоже берем. Все отстальное отбрасываем.

У меня получилась такая регулярка:
[0-9]{1,40},first_name:.*,last_name:.[^,]*,sex:2,bdate:[0-9]{1,2}\.[0-9]{1,2}(\.(1985|1986|1987|1988|1989|1990|1991|1992|1993|1994|1995|1996|1997))?

Она работает почти правильно. Захватывает лишние 2 строки с годами 1984 и 1980.

Я так понимаю, что после bdate:[0-9]{1,2}\.[0-9]{1,2} нужно сделать условие, что если есть точка -> проверяем год -> если все ок, то берем. Если нет точки -> то просто берем. Но у меня что-то не выходит.

Помогите, пожалуйста.
Заранее благодарю!
Ответить с цитированием