Forum Webscript.Ru

Программирование => Perl => Тема начата: glebushka от 18 Сентября 2005, 18:19:08

Название: отрезаем строку необходимой длины
Отправлено: glebushka от 18 Сентября 2005, 18:19:08
Например есть строка:
my $string="Когда, наконец, выйдет "e;Перл 6"e;?";
Хочу получить первые 25 символов. Например, так:
$string=~m/^(.{0,25}).*/;
my $short_string=$1;
Получаем вполне закономерный результат:
"Когда, наконец, выйдет &q"
Но, как несложно догадаться, это не совсем то, что хочется получить.
Каким способом можно решить проблему? Учитывая что символы могут иметь как буквенные, так и цифровые коды?
Название: отрезаем строку необходимой длины
Отправлено: Корепанов Иван от 18 Сентября 2005, 18:33:30
Попробуй например, сначала заменить все " на кавычки

а после отрезания произвести обратную замену кавычек на "
Название: отрезаем строку необходимой длины
Отправлено: Корепанов Иван от 18 Сентября 2005, 18:37:03
$string=~s/\\"/\\"/g;

$string=~m/^(.{0,25}).*/;
my $short_string=$1;

$short_string=~s/\\"/\\"/g;

Я не знаю, может быть есть замена, которая автомически переводит все символы типа &...; в нормальные...
Название: отрезаем строку необходимой длины
Отправлено: glebushka от 18 Сентября 2005, 18:41:51
Корепанов Иван, это понятно:) Но "e; в качестве примера. Таким макаром придётся всю таблицу символов перебивать. Что-то слишком сложно. Наверняка кто-нить по этому поводу модуль на CPAN выложил, только бы понять каким запросом его искать.
Название: отрезаем строку необходимой длины
Отправлено: Корепанов Иван от 18 Сентября 2005, 21:23:03
тогда ничего другого не могу предложить :)
Название: отрезаем строку необходимой длины
Отправлено: Anarki от 19 Сентября 2005, 19:24:27
Только HTML коды?
Есть модуль http://search.cpan.org/~frighetti/HTML-Encoder-0.00_04/
HTML::Encoder, который переводит спец. символы в HTML коды.
Думаю чуть доработать его на обратное, вставить регулярки и пройтись по ключам его хеша, заменяя в строке на значения элементов хеша.
Название: отрезаем строку необходимой длины
Отправлено: NeoNox от 19 Сентября 2005, 20:53:48
glebushka
CGI::unescape пробовал?
upd. сори, не понял задачи.
Я бы взял html_unescape из HTML::Stream
Название: отрезаем строку необходимой длины
Отправлено: glebushka от 20 Сентября 2005, 02:13:34
NeoNox
Спасибо за наводку. В описании к самому модулю HTML::Stream порекомендавли заюзать для моих целей функцию decode из HTML::Entities. Его и заюзал.
(вот что по поводу html_unescape в доке:
Note: provided for convenience and backwards-compatibility only. You may want to use the more-powerful HTML::Entities::decode function instead: unlike this function, it can collapse entities like copy and ccedil into their Latin-1 byte values.)