2012-10-23 59 views
0

對不起,即時通訊新的在perl中找不到類似的答案。perl獲得一行中的第一個匹配詞

HTML文件

<div class="user_rating"> 
. 
. 
<span class="genre"> 
. 
. 
. 
<span class="genre"> 
. 
. 
. 
<span class="genre"> 
. 
. 
. 
<span class="genre"> 

perl的文件

$content =~ /<div class="user_rating">(.*)<span class="genre">/gs; 
$empty = $1; 

這個耗資空變量包含<div class="user_rating">最後<span class="genre">信息。

但我只是想從<div class="user_rating">的信息到第一個<span class="genre">。 我應該如何修改我的代碼?我知道這是一個正則表達式問題。

任何幫助PLZ ...

+4

如果您要做大量的HTML解析,請查看諸如「HTML :: TreeBuilder」之類的東西(http://search.cpan.org/~cjm/HTML-Tree-5.03/lib/ HTML/TreeBuilder.pm),它將爲你解析HTML。正則表達式對於這樣的任務來說肯定是一個有用的快速而且骯髒的解決方案,但它通常不是一種強大的HTML處理方式。 – dan1111

+3

[不要嘗試用正則表達式解析HTML](http://stackoverflow.com/a/1732454/470535),使用[HTML解析器](http://search.cpan.org/dist/HTML-而不是Parser/Parser.pm)。 – dgw

回答

4

修改你的正則表達式,因爲.*是貪婪。

$content =~ /<div class="user_rating">(.*?)(<span class="genre">){1}/gs; 
+0

謝謝,它的工作原理! – user23256

+3

@ user1767718歡迎來到SO!如果這個答案適用於你,你也可以接受它。但也要考慮問題評論中的解析器提示:) – memowe