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

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

Отправлено kapitonz , 21-Мрт-08 10:36 
Есть задача:
Имеется строчка из n количества (звездочек) *********. Необходимо на Perl, используя только одно (!!!) регулярное выражение, заменить все звездочки кроме первой на точку. Первую звездочку на точку могу поменять, а вот чтобы первую не трогать и заменить только последующие не получается. Помогите плиз.


Содержание

Сообщения в этом обсуждении
"помогите с регулярным выражением на perl"
Отправлено idle , 21-Мрт-08 11:10 
>Есть задача:
>Имеется строчка из n количества (звездочек) *********. Необходимо на Perl, используя только
>одно (!!!) регулярное выражение, заменить все звездочки кроме первой на точку.
>Первую звездочку на точку могу поменять, а вот чтобы первую не
>трогать и заменить только последующие не получается. Помогите плиз.

s/\*+/*./;


"помогите с регулярным выражением на perl"
Отправлено kapitonz , 21-Мрт-08 11:18 
>>Есть задача:
>>Имеется строчка из n количества (звездочек) *********. Необходимо на Perl, используя только
>>одно (!!!) регулярное выражение, заменить все звездочки кроме первой на точку.
>>Первую звездочку на точку могу поменять, а вот чтобы первую не
>>трогать и заменить только последующие не получается. Помогите плиз.
>
>s/\*+/*./;

Не работает, ошибка.

#echo "******" | perl -p -e 's/\*+/*./;'
*.

Пропали последующие символы.
Должны были получить:
*.....


"помогите с регулярным выражением на perl"
Отправлено Аноним , 21-Мрт-08 11:11 
>Есть задача:
>Имеется строчка из n количества (звездочек) *********. Необходимо на Perl, используя только
>одно (!!!) регулярное выражение, заменить все звездочки кроме первой на точку.
>Первую звездочку на точку могу поменять, а вот чтобы первую не
>трогать и заменить только последующие не получается. Помогите плиз.

$myline =~ s/*+/*\./;

menyayem vse ******** na *.


"помогите с регулярным выражением на perl"
Отправлено kapitonz , 21-Мрт-08 11:15 
>>Есть задача:
>>Имеется строчка из n количества (звездочек) *********. Необходимо на Perl, используя только
>>одно (!!!) регулярное выражение, заменить все звездочки кроме первой на точку.
>>Первую звездочку на точку могу поменять, а вот чтобы первую не
>>трогать и заменить только последующие не получается. Помогите плиз.
>
>$myline =~ s/*+/*\./;
>
>menyayem vse ******** na *.

Не то однако:
#echo "******" | perl -p -e 's/\*+/*./;'
*.

Пропали последующие звездочки (*), которые должны были поменяться на (.)


"помогите с регулярным выражением на perl"
Отправлено idle , 21-Мрт-08 11:31 
>[оверквотинг удален]
>>
>>$myline =~ s/*+/*\./;
>>
>>menyayem vse ******** na *.
>
>Не то однако:
>#echo "******" | perl -p -e 's/\*+/*./;'
>*.
>
>Пропали последующие звездочки (*), которые должны были поменяться на (.)

Тогда так.
echo "****" | perl -ane 's/(?<=\*)\*/./g;print'


"помогите с регулярным выражением на perl"
Отправлено amkir , 21-Мрт-08 12:02 
>Есть задача:
>Имеется строчка из n количества (звездочек) *********. Необходимо на Perl, используя только
>одно (!!!) регулярное выражение, заменить все звездочки кроме первой на точку.
>Первую звездочку на точку могу поменять, а вот чтобы первую не
>трогать и заменить только последующие не получается. Помогите плиз.

$a="********************";
$a=~s/(\*)(\*+)/$1 . "." x length($2)/e;
print $a;


"помогите с регулярным выражением на perl"
Отправлено madskull , 24-Мрт-08 11:49 
>>Есть задача:
>>Имеется строчка из n количества (звездочек) *********. Необходимо на Perl, используя только
>>одно (!!!) регулярное выражение, заменить все звездочки кроме первой на точку.
>>Первую звездочку на точку могу поменять, а вот чтобы первую не
>>трогать и заменить только последующие не получается. Помогите плиз.
>
>$a="********************";
>$a=~s/(\*)(\*+)/$1 . "." x length($2)/e;
>print $a;

видимо нужен регексп, поэтому Вашу идею развиваем в:
echo '*********' |perl -ne 's/^*(\*+)/"*"."."x(length($1))/e;print'


"помогите с регулярным выражением на perl"
Отправлено madskull , 24-Мрт-08 11:50 
>[оверквотинг удален]
>>>одно (!!!) регулярное выражение, заменить все звездочки кроме первой на точку.
>>>Первую звездочку на точку могу поменять, а вот чтобы первую не
>>>трогать и заменить только последующие не получается. Помогите плиз.
>>
>>$a="********************";
>>$a=~s/(\*)(\*+)/$1 . "." x length($2)/e;
>>print $a;
>
>видимо нужен регексп, поэтому Вашу идею развиваем в:
>echo '*********' |perl -ne 's/^*(\*+)/"*"."."x(length($1))/e;print'

Ну ступил, ну не проснулся... бывает :)


"помогите с регулярным выражением на perl"
Отправлено from_mars , 31-Мрт-08 06:17 
Зачем perl, когда есть pascal?
Вот как это красиво на паскале:

var
  s: string;
  i: integer;
begin
  s := '*********';
  for i:=1 to length(s) do
    if i <> 1 then s[i] = '.';
writeln(s);
end.


"помогите с регулярным выражением на perl"
Отправлено Arpo , 31-Мрт-08 08:35 
>[оверквотинг удален]
>
>var
>  s: string;
>  i: integer;
>begin
>  s := '*********';
>  for i:=1 to length(s) do
>    if i <> 1 then s[i] = '.';
> writeln(s);
>end.

И откуда интересно я на своей Соляре паскаль дастану??


"помогите с регулярным выражением на perl"
Отправлено angra , 31-Мрт-08 09:17 
Я вот не могу понять, это у вас такой тонкий юмор или просто в детстве уронили на голову исказив понимание красоты? Если последнее, то можете усовершенствовать свой пример, дабы он научился читать со стандартного ввода и обрабатывать строки где есть не только *. Потом сравните с уже предложенным:
perl -ane 's/(?<=\*)\*/./g;print'

"помогите с регулярным выражением на perl"
Отправлено from_mars , 31-Мрт-08 10:38 
>Я вот не могу понять, это у вас такой тонкий юмор или...

Да, просто пошутил :)