2013-08-21 66 views
-3

我有下面的代碼來獲取字符串內的子字符串,我使用正則表達式,但他們似乎不能正常工作。我該怎麼做?Perl - 正則表達式問題

我有這個字符串:

vlex.es/jurisdictions/ES/search?textolibre=transacciones+banco+de+bogota&translated_textolibre=,300,220,00:00:38,2,0.00%,38.67%,€0.00 

,我想這個字符串:

transacciones+banco+de+bogota 

代碼:

open my $info, $myfile or die "Could not open $myfile: $!"; 

while (my $line = <$info>) { 
    if ($line =~ m/textolibre=/) { 
     my $line =~ m/textolibre=(.*?)&translated/g; 
     print $1; 
    } 

    last if $. == 3521239; 
} 

close $info; 

的錯誤:

Use of uninitialized value $line in pattern match (m//) at classifier.pl line 10, <$info> line 20007. 
Use of uninitialized value $1 in print at classifier.pl line 11, <$info> line 20007. 
+1

什麼不工作是什麼呢?正則表達式匹配你想要的東西! –

+0

我看到你回到了你的舊技巧,隨機地改變問題的細節以取消你給出的答案的資格(例如之後添加錯誤,或將'print $ line'改爲'print $ 1')。那些試圖回答你的問題的人肯定不會理解這種行爲。 – TLP

+0

@TLP嘿!多久! –

回答

0

$line第二個聲明是錯誤的,下降my

$line =~ m/textolibre=(.*?)&translated/g; 
+0

爲什麼downvote?該問題的原始版本包含'print $ line'。 – collapsar

+0

@marcotiz:將'my'from'my $ line ='移除到〜m/textolibre =(。*?)&translated/g;' - 您正在重新定義一個變量。 – collapsar

0

很抱歉,但我已經找到了答案。在第10行my $line =~ m/textolibre=(.*?)&translated/g;我聲明相同的變量兩次,所以這就是爲什麼拋出錯誤。 謝謝!

5

您使用的工具是錯誤的工具。您可以使用URI模塊及其URI::QueryParam模塊提取參數:

use strict; 
use warnings; 
use URI; 
use URI::QueryParam; 

my $str = "ivlex.es/jurisdictions/ES/search?textolibre=transacciones+banco+de+bogota&translated_textolibre=,300,220,00:00:38,2,0.00%,38.67%,0.00"; 

my $u = URI->new($str); 
print $u->query_param('textolibre'); 

輸出:

transacciones banco de bogota