Как я могу отделить изображение, HTTP URL и электронную почту от строки кода Perl - PullRequest
1 голос
/ 28 сентября 2019

Это программа чата.Мне удалось отделить изображения от большей части текста, но это оставляет его встроенным в строку.Пока неизвестно, где URL будет находиться в строке, и если ввод текста происходит перед ним или после него, он появляется в строке!Мне нужно, чтобы он отделил и поместил только URL регулярного выражения изображения в s / $ image //.

Я пробовал циклы while, foreach и сбивал всю систему с помощью цикла for!Я получаю изображение на месте, но только если я оставляю для него целую пустую строку.То же самое и с веб-страницей ....

      if (($searchhttp = m/^http/sig) 
      && ($search_image = m/(.jpg|.jpeg|.gif|.png)/ig)) {
    @jpgimage = @_;
    $jpgimage = $jpgimage[0];

   $jpgimage =~ grep(/(^https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6}) ([\/\w \.-]*)*\/?(?:.jpg|.jpeg|.gif|png)$/sig);

           $image = substr($jpgimage, 0);
           ($image) = split(/\s+/, $jpgimage);
                    chomp($image);

   $filter =~ s/$image/<img src ='$image' align ='left'>/; 

    print $image.'<BR>';
   #print $jpgimage.'<BR>';
  }

Если я оставлю это только на одной строке, это будет работать ... Если я наберу до или после него, это не так.она включает всю строку в href или в img src.

Мне нужно найти способ извлечь ее из строки

Пример ...

Он берет весь текст из этой строки и помещает его в правильные скобки, только одну длинную строку ... "проверка, если это работает http://172.31.4.253/images/joe.jpg"" https://www.perltutorial.org, давайте попробуем это "

Я потратил на это месяц ... и этот код - лучшее, что я получил!

Может быть и, скорее всего, будет более одного изображения.

Это результат, который я получаю после того, как я вставлю 5 картинок, одна со словом «Test» впереди, и эти 4 помещены в img src ...

http://172.31.4.253/images/joe.jpg
https://www.perltutorial.org/wp-content/uploads/2012/11/Perl-Tutorial.jpg
http://172.31.4.253/images/joe.jpg
https://www.perltutorial.org/wp-content/uploads/2012/11/Perl-Tutorial.jpg

1 Ответ

1 голос
/ 29 сентября 2019

Парсинг и обработка URL не тривиальны.Очень легко ошибиться, поэтому, если возможно, его следует оставить проверенному в бою модулю.Рассмотрим этот код.

use URI;
use URL::Search qw(extract_urls);

my $webpage = join "", <DATA>; # wherever your data comes from

for my $url (extract_urls $webpage) 
{
    my $url_object    = URI->new( $url );
    my $host_ok       = $url_object->host =~ /\.(com|net|jp|org|uk)$/i;
    my $is_image      = $url_object->path =~ /\.(jpg|jpeg|gif|png)$/i;
    my $save_url      = $url_object->canonical;
    my $regex_for_url = quotemeta( $url );

    $webpage =~ s/$regex_for_url/<img src="$save_url">/g
      if $host_ok && $is_image;
}

print $webpage;
__DATA__
https://docs.perl6.org
https://github.xxx/foo.gif
https://docs.perl6.org/camelia.png
https://docs.perl6.org/camelia.gif

Вывод

https://docs.perl6.org
https://github.xxx/foo.gif
<img src="https://docs.perl6.org/camelia.png">
<img src="https://docs.perl6.org/camelia.gif">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...