Автор Тема: И снова, очень нужные и ненавистные...  (Прочитано 6693 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн YYYn

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Оговорюсь сразу, эти темы уже несколько раз здесь обсуждались, но тем не менее.
Я думаю, что надо все вместе собрать и попросить товарища НеоНокса добавить это в FAQ, тем более, что он давно хотел это сделать.

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

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

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

Накидайте сюда у кого что есть.
Всем заранее спасибо!
« Последнее редактирование: 02 Февраля 2003, 21:11:19 от YYYn »

Оффлайн Е. Перлов

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 21
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
И снова, очень нужные и ненавистные...
« Ответ #1 : 02 Февраля 2003, 21:19:42 »
Для замены адресов я использую такие функции:


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

sub escape
{
  
my $str shift;
  
$str =~ s/([^0-9A-Za-z:\\.\\-_\\@\\/\\\\\\?=&\\+\\#])/sprintf("%%%x", ord($1))/eg;
  
$str
}
« Последнее редактирование: 02 Февраля 2003, 21:30:44 от Е. Перлов »

Оффлайн Е. Перлов

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 21
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
И снова, очень нужные и ненавистные...
« Ответ #2 : 02 Февраля 2003, 21:35:06 »
P.S. функции в форуме отображаются неправильно; исчезли бэкслэши

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
И снова, очень нужные и ненавистные...
« Ответ #3 : 02 Февраля 2003, 23:16:49 »
Е. Перлов
поставь по три слэша
•••Jah\'d never let us down!•••

Оффлайн Е. Перлов

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 21
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
И снова, очень нужные и ненавистные...
« Ответ #4 : 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: (я его добавил, чтобы не появился смайлик ": ("  )
« Последнее редактирование: 03 Февраля 2003, 00:55:06 от Е. Перлов »

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
И снова, очень нужные и ненавистные...
« Ответ #5 : 09 Февраля 2003, 02:46:00 »
Цитировать
надо все вместе собрать и попросить товарища НеоНокса добавить это в FAQ


Мне тоже так кажется, потому что, мне приходитря буквально посимольно узнавать правду о регулярных выражениях. :-)

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
И снова, очень нужные и ненавистные...
« Ответ #6 : 09 Февраля 2003, 13:46:14 »
Цитировать
приходитря буквально посимольно узнавать правду о регулярных выражениях.
А один раз прочитать мануал или книжку?
ИМХО, регулярные выражения - не тема для FAQ\'а.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
И снова, очень нужные и ненавистные...
« Ответ #7 : 09 Февраля 2003, 16:54:52 »
Честно говоря, никогда не читал книжки по программированию, и манулалы тоже...
Я больше смотрю и учусь как делают другие и выбираю наиболее рациональное решение, тем более что любую задачу можно решить несколькими способами, а в книжках, как правило, описывается лишь один способ, который автор где-то надыбал...

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
И снова, очень нужные и ненавистные...
« Ответ #8 : 09 Февраля 2003, 16:57:26 »
Phoinix
Ты очень не прав. Регулярные выражения один раз осознаются, а потом легко и непаринужденно придумываются на все случаи жизни.
А книжки читать надо. Возражения, приведенные тобой - полная чушь, да и как ты можешь что-то знать о книгах по программированию, если ни одной не прочитал?

К тому же консультировать по какому-то языку человека, не читавшего мануал - непрасный труд. Ты ему скажешь, как делать А и Б, а он к тебе завтра придет и спросит: "а как же В?"...
•••Jah\'d never let us down!•••

Оффлайн YYYn

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
И снова, очень нужные и ненавистные...
« Ответ #9 : 09 Февраля 2003, 17:40:02 »
Цитировать
ИМХО, регулярные выражения - не тема для FAQ\'а.


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

ИМХО один из вариантов перевода "FAQ" - "часто задаваемые вопросы". Разве регулярные это не частая тема?

Оффлайн YYYn

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
И снова, очень нужные и ненавистные...
« Ответ #10 : 09 Февраля 2003, 18:08:49 »
Цитировать
А книжки читать надо.


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

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
И снова, очень нужные и ненавистные...
« Ответ #11 : 09 Февраля 2003, 20:22:23 »
Цитировать
Стоит покупать?


Стоит - это перевод так называемой MRE (Mastering Regular Expressions). Если нет проблем с английским, то pdf вариант книги можно нарыть и в интернете.
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
И снова, очень нужные и ненавистные...
« Ответ #12 : 09 Февраля 2003, 20:29:09 »
Тут еще можно глянуть:

http://perldoc.narod.ru/

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


И еще разные доки в pdf. Жаль только давно не обновляется...
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
И снова, очень нужные и ненавистные...
« Ответ #13 : 09 Февраля 2003, 22:56:04 »
[off]
Цитировать
нашел http://www.books.ru/shop/books/12870 Ваше мнение о ней? Стоит покупать?
Ее ты вряд ли купишь - думаю, она везде закончилась. Но, в этом месяце должно выйти второе издание.[/off]
Цитировать
ИМХО один из вариантов перевода "FAQ" - "часто задаваемые вопросы". Разве регулярные это не частая тема?
Это слишком объемная тема, чтобы освещать ее в FAQ, недаром ей целые книги посвящают. Вот если бы речь шла об отдельном FAQ по регулярным выражениям...
Литературный перевод с русского и английского на Perl. Дорого!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28