Forum Webscript.Ru

Программирование => Perl => Тема начата: YYYn от 02 Февраля 2003, 02:19:35

Название: И снова, очень нужные и ненавистные...
Отправлено: YYYn от 02 Февраля 2003, 02:19:35
Оговорюсь сразу, эти темы уже несколько раз здесь обсуждались, но тем не менее.
Я думаю, что надо все вместе собрать и попросить товарища НеоНокса добавить это в FAQ, тем более, что он давно хотел это сделать.

1. Удаление ссылок из строки.
2. Удаление e-mail из строки.
3. Вылавливание ссылок в строке.
4. Вылавливание e-mail в строке.
5. Замена адресов в строке на ссылки (http://myhost.ru  -  myhost.ru).
6. Замена e-mail в строке на ссылки (info@myhost.ru  -  info@myhost.ru).

Для первого пункта я использую:
$line =~ s{(.*)}{$2}ig;

Почему я поднял эту тему? Мне сейчас потребовался пункт №6, но сразу найти не смог...

Накидайте сюда у кого что есть.
Всем заранее спасибо!
Название: И снова, очень нужные и ненавистные...
Отправлено: Е. Перлов от 02 Февраля 2003, 21:19:42
Для замены адресов я использую такие функции:


sub process_links
{
  my $message = shift;
  $message =~ s|http(s?)://([0-9A-Za-z\\:\\.\\-_\\@\\/\\\\\\?=&\\+\\#]+)|qq`[ссылка]|egi;
  $message =~ s|ft p://([0-9A-Za-z\\:\\.\\-_\\@\\/\\\\\\?=&\\+\\#]+)|\'[ссылка]\'|egi;
  $message =~ s|mailto: ([0-9A-Za-z\\:\\.\\-_\\@\\/\\\\\\?=&\\+\\#]+)|\'[email]\'|egi;
  $message
}

sub escape
{
  my $str = shift;
  $str =~ s/([^0-9A-Za-z:\\.\\-_\\@\\/\\\\\\?=&\\+\\#])/sprintf("%%%x", ord($1))/eg;
  $str
}
Название: И снова, очень нужные и ненавистные...
Отправлено: Е. Перлов от 02 Февраля 2003, 21:35:06
P.S. функции в форуме отображаются неправильно; исчезли бэкслэши
Название: И снова, очень нужные и ненавистные...
Отправлено: Xander от 02 Февраля 2003, 23:16:49
Е. Перлов
поставь по три слэша
Название: И снова, очень нужные и ненавистные...
Отправлено: Е. Перлов от 03 Февраля 2003, 00:46:01
Я немного подумал, сделал несколько проверок, и решил чуть-чуть изменить эти функции:

sub process_links
{
my $message = shift;
$message =~ s|http(s?)://(\\S+)|qq`[ссылка]`|egi;
$message =~ s|http://ftp://(\\S+)|\'[ссылка]\'|egi;
$message =~ s|mailto: (\\S+)|\'[email]\'|egi;
$message
}

sub escape
{
my $str = shift;
$str =~ s|([^0-9A-Za-z:.=&+/%_@\\-\\?\\#\\\\])|sprintf "%%%x", ord($1)|eg;
$str
}

_____
только надо убрать пробел после mailto: (я его добавил, чтобы не появился смайлик ": ("  )
Название: И снова, очень нужные и ненавистные...
Отправлено: Phoinix от 09 Февраля 2003, 02:46:00
Цитировать
надо все вместе собрать и попросить товарища НеоНокса добавить это в FAQ


Мне тоже так кажется, потому что, мне приходитря буквально посимольно узнавать правду о регулярных выражениях. :-)
Название: И снова, очень нужные и ненавистные...
Отправлено: YA от 09 Февраля 2003, 13:46:14
Цитировать
приходитря буквально посимольно узнавать правду о регулярных выражениях.
А один раз прочитать мануал или книжку?
ИМХО, регулярные выражения - не тема для FAQ\'а.
Название: И снова, очень нужные и ненавистные...
Отправлено: Phoinix от 09 Февраля 2003, 16:54:52
Честно говоря, никогда не читал книжки по программированию, и манулалы тоже...
Я больше смотрю и учусь как делают другие и выбираю наиболее рациональное решение, тем более что любую задачу можно решить несколькими способами, а в книжках, как правило, описывается лишь один способ, который автор где-то надыбал...
Название: И снова, очень нужные и ненавистные...
Отправлено: Xander от 09 Февраля 2003, 16:57:26
Phoinix
Ты очень не прав. Регулярные выражения один раз осознаются, а потом легко и непаринужденно придумываются на все случаи жизни.
А книжки читать надо. Возражения, приведенные тобой - полная чушь, да и как ты можешь что-то знать о книгах по программированию, если ни одной не прочитал?

К тому же консультировать по какому-то языку человека, не читавшего мануал - непрасный труд. Ты ему скажешь, как делать А и Б, а он к тебе завтра придет и спросит: "а как же В?"...
Название: И снова, очень нужные и ненавистные...
Отправлено: YYYn от 09 Февраля 2003, 17:40:02
Цитировать
ИМХО, регулярные выражения - не тема для FAQ\'а.


А тогда для чего? Для того, чтобы там писать иди и читай perlfaq? Мне однажды потребовался крон и я пошел в FAQ, а там вмето нормального ответа: читай perlfaq... Че я сам не догадаюсь? Зачем вообще нужен такой FAQ!?

ИМХО один из вариантов перевода "FAQ" - "часто задаваемые вопросы". Разве регулярные это не частая тема?
Название: И снова, очень нужные и ненавистные...
Отправлено: YYYn от 09 Февраля 2003, 18:08:49
Цитировать
А книжки читать надо.


Что книжки читать надо я не спорю, но как мне кажется, человек лезет в форум или FAQ, не в тот момент, когда есть возможность найти ответ в мануале. Не у всех в нужный момент есть книжка под рукой. По регулярным я нашел http://www.books.ru/shop/books/12870 Ваше мнение о ней? Стоит покупать?
Название: И снова, очень нужные и ненавистные...
Отправлено: Wyclef от 09 Февраля 2003, 20:22:23
Цитировать
Стоит покупать?


Стоит - это перевод так называемой MRE (Mastering Regular Expressions). Если нет проблем с английским, то pdf вариант книги можно нарыть и в интернете.
Название: И снова, очень нужные и ненавистные...
Отправлено: Wyclef от 09 Февраля 2003, 20:29:09
Тут еще можно глянуть:

http://perldoc.narod.ru/ (http://perldoc.narod.ru/)

Цитировать
Крутая вещь появилась на моем сайте - учебник по regexp от Стива Холзнера.


И еще разные доки в pdf. Жаль только давно не обновляется...
Название: И снова, очень нужные и ненавистные...
Отправлено: YA от 09 Февраля 2003, 22:56:04
[off]
Цитировать
нашел http://www.books.ru/shop/books/12870 Ваше мнение о ней? Стоит покупать?
Ее ты вряд ли купишь - думаю, она везде закончилась. Но, в этом месяце должно выйти второе издание.[/off]
Цитировать
ИМХО один из вариантов перевода "FAQ" - "часто задаваемые вопросы". Разве регулярные это не частая тема?
Это слишком объемная тема, чтобы освещать ее в FAQ, недаром ей целые книги посвящают. Вот если бы речь шла об отдельном FAQ по регулярным выражениям...