Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > подскажите регулярку


Автор: zomber 10.6.2014, 15:13
есть строка типа Y.N.N.Y.Y.Y.N.N.N.N
надо зная порядковый номер выбрать значение между точками
чисто регуляркой

пробовал '[^.]+'

и всё бы ничего
но

значения могут отсутствовать 
например 
Y.N.N....N.N..N

и вот в этом случае '[^.]+' не работает


Автор: Bulat 10.6.2014, 17:07
Цитата(zomber @  10.6.2014,  15:13 Найти цитируемый пост)
надо зная порядковый номер выбрать значение между точками

честно говоря не очень понял. Можно раскрыть?  smile 

Автор: tzirechnoy 10.6.2014, 18:51
Ну, [^.]*

Только это всё извращения, конечно. Молодой человек, зачем Вам извращения -- обычного секса мало что-ли?

Автор: Romikgy 10.6.2014, 20:41

([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*

Автор: zomber 11.6.2014, 12:00
Цитата(Bulat @ 10.6.2014,  17:07)
Цитата(zomber @  10.6.2014,  15:13 Найти цитируемый пост)
надо зная порядковый номер выбрать значение между точками

честно говоря не очень понял. Можно раскрыть?  smile

для Y.N.N.Y.Y.Y.N.N.N.N
первый матч должен быть Y
второй N
3 - N
4 - Y
etc.

11 - пустая строка

для Y...Y.Y.Y.N.N.N.N

первый матч должен быть Y
2 - пустая строка
3 - пустая строка
4 - Y

Добавлено через 1 минуту
Цитата(Romikgy @ 10.6.2014,  20:41)
([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*\.([Y|N])*

не катит

кол-во не известно заранее
и может быть в общем случае не только Y/N

Автор: Bulat 11.6.2014, 15:24
zomber
все равно до конца не понял, но может быть
Код

my $i = 0; #индекс массива - порядковый номер
my $s = q{Y..N.Y.N.N.N.N.N};
my @res = $s =~ /([YN]*)./g;
print $res[$i];


задаешь $i - получаешь результат. Или я до сих пор чего-то недопонимаю??

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)