Forum Webscript.Ru

Программирование => Perl => Тема начата: andrez от 11 Июня 2004, 14:20:48

Название: Как удалить 1 символ строки
Отправлено: andrez от 11 Июня 2004, 14:20:48
Как это сделать?
Название: Как удалить 1 символ строки
Отправлено: NeoNox от 11 Июня 2004, 14:26:59
$stroka =~ s/^.{1}//;
Название: Как удалить 1 символ строки
Отправлено: commander от 11 Июня 2004, 15:03:31
andrez
какой? первый последний или произвольный???
Название: Как удалить 1 символ строки
Отправлено: andrez от 11 Июня 2004, 16:02:29
Цитировать
commander:
какой? первый последний или произвольный???

как первый удалить уже написали, напиши как произвольный


И где можно почитать про регулярные выражения, чтоб много и понятно?
Название: Как удалить 1 символ строки
Отправлено: andrez от 11 Июня 2004, 16:12:36
и как удалить все символы кроме последних 3?
Название: Как удалить 1 символ строки
Отправлено: NeoNox от 11 Июня 2004, 16:42:54
s/.{3}$//
Название: Как удалить 1 символ строки
Отправлено: NeoNox от 11 Июня 2004, 16:45:26
Цитировать
andrez:
И где можно почитать про регулярные выражения, чтоб много и понятно?

perldoc perlre
http://perldoc.narod.ru/regexp2-ref.pdf
Название: Как удалить 1 символ строки
Отправлено: andrez от 11 Июня 2004, 18:25:03
Цитировать
NeoNox:
s/.{3}$//

у меня вся строчка гробится, а вместо нее пробел возвращается
Название: Как удалить 1 символ строки
Отправлено: NeoNox от 14 Июня 2004, 12:06:36
Цитировать
andrez:
у меня вся строчка гробится, а вместо нее пробел возвращается

угу, неправильно понял.
s/.*?(.{3})$/$1/
perldoc -f substr
Название: Как удалить 1 символ строки
Отправлено: КшЫуфксрук от 14 Июня 2004, 17:55:34
Только все эти задачи лучше решать с помощью substr, оно именно для этого и предназначено.
Название: Как удалить 1 символ строки
Отправлено: NeoNox от 14 Июня 2004, 18:59:33
КшЫуфксрук
прав
в @m помещен CGI.pm
Цитировать
   
RegEXP:  0 wallclock secs ( 0.26 usr +  0.00 sys =  0.26 CPU) @ 23.08/s (n=6)
            (warning: too few iterations for a reliable count)
    SUBSTR:  0 wallclock secs ( 0.03 usr +  0.00 sys =  0.03 CPU) @ 200.00/s (n=6)
            (warning: too few iterations for a reliable count)
         Rate RegEXP SUBSTR
RegEXP 23.1/s     --   -88%
SUBSTR  200/s   767%     --

             RegEXP => sub { undef $z; foreach my $t ( @m ){ $z .= $t =~ s/.*?(.{3})$/$1/} },
                SUBSTR => sub { undef $z; foreach my $t ( @m ){ $z .= substr $t, -3 }},
Название: Как удалить 1 символ строки
Отправлено: КшЫуфксрук от 14 Июня 2004, 20:57:22
Произвольный символ тоже удобнее удалить в помощью substr:

substr($str,$pos,1) = ""; #удаляем символ под номером $pos
Название: Поиск по шаблону
Отправлено: andrez от 16 Июня 2004, 16:51:33
есть строчка ищу в ней точки ~/\\./ ищет по всей строке
вопос: как делать сравнение с нным символом строки, например с 2
Название: Как удалить 1 символ строки
Отправлено: NeoNox от 16 Июня 2004, 17:03:17
Почитай документацию по регекспам и перестанеш по каждому чиху на форум бегать.
Название: Как удалить 1 символ строки
Отправлено: andrez от 16 Июня 2004, 17:04:15
Цитировать
NeoNox:
Почитай


уже читаю! :) вдруг кто сразу скажет
Название: Как удалить 1 символ строки
Отправлено: NeoNox от 16 Июня 2004, 17:09:28
запросто, но
неужели самому не интересно найти ответ?
Название: Как удалить 1 символ строки
Отправлено: КшЫуфксрук от 16 Июня 2004, 18:34:28
> вопос: как делать сравнение с нным символом строки, например с 2

Если ты точно знаешь, где должна стоять точка, то почему бы не использовать все тот же substr?
Название: Как удалить 1 символ строки
Отправлено: andrez от 17 Июня 2004, 13:33:19
if (substr($stroka,1,1)=~/\\./) вот так оно работает, упростить можно?
Название: Как удалить 1 символ строки
Отправлено: КшЫуфксрук от 17 Июня 2004, 14:56:15
if (substr($str,1,1) eq ".") { print "Ok!\\n" }
Название: Как удалить 1 символ строки
Отправлено: andrez от 17 Июня 2004, 15:00:11
Цитировать
КшЫуфксрук:
if (substr($str,1,1) eq ".") { print "Ok!\\n" }

 имелось ввиду не используя substr
Название: Как удалить 1 символ строки
Отправлено: andrez от 18 Июня 2004, 12:26:09
еще вопросик! запись такого вида
if ($str=~/blabla/) выполнять если в строке $str есть blabla
как написать выполнять если в $str нет blabla?
Пишу if ($str!=~/blabla/) и нифига не работает
Название: Как удалить 1 символ строки
Отправлено: NeoNox от 18 Июня 2004, 12:28:41
документацию открывал?
if ($str  !~ /blabla/)
Название: Как удалить 1 символ строки
Отправлено: vladsu от 18 Июня 2004, 12:47:21
Цитировать
andrez:
if ($str=~/blabla/) выполнять если в строке $str есть blabla
как написать выполнять если в $str нет blabla?


perldoc perlsyn

смотреть unless
Название: Как удалить 1 символ строки
Отправлено: КшЫуфксрук от 18 Июня 2004, 14:48:02
andrez

Ну а зачем использовать что-то другое, если для этих целей предназначем именно substr???

Можно придумать кучу способов, но вряд ли они будут быстрее или проще. А если какой-то и окажется на пару тактов быстрее, то читабельность сильно пострадает.