URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 2363
[ Назад ]

Исходное сообщение
"Помогите составить регулярное выражение"

Отправлено forever11 , 29-Май-04 13:30 
Нужно составить регулярное выражение, которое будет расставалять разделитель разрядов в число, т.е. 1234567890 преобразует в 1 234 567 890.

$s =~ s/(...)/\ $1/g работает только, если число цифр кратно трем :(


Содержание

Сообщения в этом обсуждении
"Помогите составить регулярное выражение"
Отправлено dimka , 31-Май-04 17:40 
>Нужно составить регулярное выражение, которое будет расставалять разделитель разрядов в число, т.е.
>1234567890 преобразует в 1 234 567 890.
>
>$s =~ s/(...)/\ $1/g работает только, если число цифр кратно трем :(
>

perldoc Number::Format


"Помогите составить регулярное выражение"
Отправлено buzzer , 03-Июн-04 08:37 
$s=reverse $s;
$s=~s/(\d{3})(?=.)/$1 /g;
$s=reverse $s;


"Помогите составить регулярное выражение"
Отправлено Oleg , 03-Июн-04 11:24 
>Нужно составить регулярное выражение, которое будет расставалять разделитель разрядов в число, т.е.
>1234567890 преобразует в 1 234 567 890.
>
>$s =~ s/(...)/\ $1/g работает только, если число цифр кратно трем :(
>


Perl Cookbook, 2.17, стр. 89

sub commify {
  my $text = reverse $_[0];
  $text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;
  return scalar reverse $text;
}
print commify(3.1415926535897932 * 1000000);


Свой вариант:
$s = 3.1415926535897932 * 1000000;
1 while $s =~ s/(\d+)(\d\d\d)(\D)/$1,$2$3/;
print "$s\n";


Естественно, в обоих случаях вместо "$1," можно поставить "$1 ".
Цифры после десятичной точки не разделяются.


Еще можно посмотреть "Masternig regular epressions" by J.Friedl