2014-09-30 2 views
0

У меня есть переменная, которая содержит около 100 строк. Мне нужно распечатать строки, где есть URL.соответствие шаблону perl в многострочной строке

$string = "this is just a test line 1 
this is a test line 2 
http://somelink1 
this is line 4 
http://link2 
... 
... 

Мне нужно распечатать только ссылки на ссылки.

Как напечатать все строки, соответствующие шаблону, из строки $. Пробовал приведенный ниже код.

my $resu =~ /(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?/, $string; 
print $resu; 
+1

Пожалуйста, покажите, что вы пробовали. – Jens

+3

Если вы не прочитали весь свой ввод в скалярном виде в одной длинной строке, было бы просто перебирать строки за строкой и печатать нужные строки. Это немного XY-проблема. – TLP

+0

Хотя он был закрыт связанным, но не повторяющимся вопросом, я думаю, что часть, которую вы ищете в регулярном выражении, это флаги: mgc (многострочный, глобальный, не сбрасывает позицию). Затем проведите цикл в цикле while. – CoverosGene

ответ

1

Вы должны использовать /g Modifier, чтобы соответствовать несколько строк:

use strict; 
use warnings; 

my $string = <<'END_STR'; 
this is just a test line 1 
this is a test line 2 
http://somelink1 
this is line 4 
http://link2 
... 
... 
END_STR 

while ($string =~ m{(.*http://.*)}g) { 
    print "$1\n"; 
} 

Выходы:

http://somelink1 
http://link2 

Однако, если вы тянете в этих данных из файла, вы» d Лучше всего просто делать показания по строкам:

while (<$fh>) { 
    print if m{(.*http://.*)}g; 
}