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


Автор: Suppir 4.4.2010, 15:02
$a = '0123456789';

Нужно одним регулярным выражением переставить цифры в таком порядке: 
8967452301

т.е. брать две последние цифры в строке и присоединять их к новой переменной.

Автор: Logo 4.4.2010, 16:42
Код

$a = join '', reverse $a =~ m/\d\d/g;


Автор: Nab 6.4.2010, 14:12
Logo,  а если цифр не четное число?
сказано с конца smile

Автор: Logo 6.4.2010, 14:41
Про нечетное количество цифр тоже ничего не было сказаноsmile
Код

($a = reverse $a) =~ s/(\d)(\d)/$2$1/

Автор: Suppir 6.4.2010, 14:42
Logo - вариант!

А кто-нибудь с рекурсивными регулярными выражениями может написать?

Автор: Logo 6.4.2010, 14:52
А зачем там рекурсия? Я даже с трудом представляю место, в котором "притягивать за уши":)

Автор: Suppir 6.4.2010, 14:57
Logo, просто хочу понять, как с ней работать smile
В версии 5.10 добавили в рег. выражения фичи для рекурсивной обработки.

Автор: Logo 6.4.2010, 15:31
Рекурсия нужна в обычно для поиска вложенных конструкций, здесь пример не подходящий, либо для многократного использования частей регулярного выражения, имитации грамматик. Ну, к примеру, так.
Код

$a = "0123456789";
$re = qr{
    (?&term)
    (?(DEFINE)
        (?<term>\d\d)
    )
}x;
while($a =~ /$re/g) {
  $a2 = ${^MATCH} . $a2;
}
print "$a2\n";



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