2013-07-26 50 views
2

我對Perl很新,我一直在使用這個網站幾年尋找答案,我已經有關於我一直在努力的其他項目的問題,但我似乎無法找到答案這一個..Perl - 在變量中查找多個子字符串?

我的腳本收到一個HTTP響應數據,我需要剝離下來解析正確的信息。

到目前爲止,我有這樣的子..

my $output = substr ($content, index($content, 'Down'), index($content, '>')); 

這似乎是做什麼的應該是..找詞'Down'然後substringing它,直到它找到一個>

但是,字符串'Down'可能會在響應中出現很多次,並且在找到第一個示例後停止查找。

我該如何去獲得子串是遞歸?

感謝您的幫助:)

+0

使用正則表達式匹配'/ g'修飾符? 'while($ content =〜/(Down.*?>)/g){print $ 1}' – TLP

回答

5

一種方法是這樣的:

my $x="aa Down aaa > bb Down bbb > cc Down ccc >"; 

while ($x =~/(Down[^>]+>)/g){ 
     print $1; 
} 
2

另一種解決方案,而無需重複,只是存儲是什麼了。

use Data::Dumper; 
my $x="aa Down aaa > bb Down bbb > cc Down ccc >"; 
my @downs = $x =~ m!Down([^>]+)>!gis; 
print Dumper(\@downs); 
+1

不錯的非遞歸示例,但它與原始示例有些不同。具有'i'標誌使得它不區分大小寫,這可能不是所期望的,並且括號的定位導致「aaa」被捕獲,而不是「down aaa>」(可能或不需要)。 我會提議編輯自己,但顯然編輯需要6個字符或更多(但是...這是一個正則表達式!)。 –

+0

是的,從正則表達式中刪除向下和>字符串是故意的。 「只是存儲什麼」,即。不要將琴絃向下和>。 – user1126070

相關問題