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

Исходное сообщение
"Rerl удалиния метасимволов из строки"

Отправлено Valik , 26-Фев-07 07:40 
Как в строке оставить только алфавитно-цифровые символы?
$test =~s/([\w+])//g;  получаю метасимволы как теперь удалить из строки ?

Содержание

Сообщения в этом обсуждении
"Rerl удалиния метасимволов из строки"
Отправлено XAnder , 26-Фев-07 08:42 
>Как в строке оставить только алфавитно-цифровые символы?
>$test =~s/([\w+])//g;  получаю метасимволы как теперь удалить из строки ?

s/([\w+])//g == "убрать все алфавитно-цифровые символы и плюсы"

может быть, поступить просто так: s/\W//g

или даже так: s/\W+//g ?


"Rerl удалиния метасимволов из строки"
Отправлено Valik , 26-Фев-07 10:32 
>>Как в строке оставить только алфавитно-цифровые символы?
>>$test =~s/([\w+])//g;  получаю метасимволы как теперь удалить из строки ?
>
>s/([\w+])//g == "убрать все алфавитно-цифровые символы и плюсы"
>
>может быть, поступить просто так: s/\W//g
>
>или даже так: s/\W+//g ?


мне надо сделать с точности до наоборот оставить только алфавитно-цифровые


"Rerl удалиния метасимволов из строки"
Отправлено XAnder , 26-Фев-07 10:45 
>мне надо сделать с точности до наоборот оставить только алфавитно-цифровые

% perl -e '$test="qW%|eR_34 aS+DF5"; $test =~ s/\W+//g; print "$test\n";'
qWeR_34aSDF5
%

По-моему, именно это и происходит. В переменной $test, остаются только буквы, цифры и подчеркивания. Или я не правильно понял вопрос.


"Rerl удалиния метасимволов из строки"
Отправлено Valik , 27-Фев-07 08:07 
>>мне надо сделать с точности до наоборот оставить только алфавитно-цифровые
>
>% perl -e '$test="qW%|eR_34 aS+DF5"; $test =~ s/\W+//g; print "$test\n";'
>qWeR_34aSDF5
>%
>
>По-моему, именно это и происходит. В переменной $test, остаются только буквы, цифры
>и подчеркивания. Или я не правильно понял вопрос.

Получилось только вот как быть с русскими буквами. Они тоже удаляются.
use locale;
use POSIX qw(locale_h);
setlocale(LC_CTYPE, "ru_RU.UTF8");


"Rerl удалиния метасимволов из строки"
Отправлено XAnder , 27-Фев-07 08:39 
>Получилось только вот как быть с русскими буквами. Они тоже удаляются.
>use locale;
>use POSIX qw(locale_h);
>setlocale(LC_CTYPE, "ru_RU.UTF8");

Valik! В самом деле! Изучай регулярные выражения, и сразу же вопросов станет меньше. Да, времени потратишь немало, но это окупится с лихвой.

man perlre
man perlrequick
man perlretut

а также ворох книг и статей, посвященных regexp'ам.

s/[^0-9A-Za-z_]+//g - так, наверное?


"Rerl удалиния метасимволов из строки"
Отправлено A , 09-Мрт-07 10:31 
tr работает гараздо быстрее, чем s