2012-10-29 48 views
1

我想要的東西,我就another answer找到,但我有一些問題:Perl的正則表達式禁用括號提取

我知道有針對URL更好的正則表達式,但考慮這個例如:

@links=($content =~ m/(https?)?.*[.]com/g); 
*$content has text or html 

部分(https?)?用於鏈接,如www.google.com,但其括號返回"http"$1,將其放入@links!這是一個問題,因爲我想要整個鏈接。

什麼將全球提取簡單從文本鏈接(或任何指定的正則表達式),並把它們放入一個列表?
通過簡單的,我的意思是:

  • http://www.google.com
  • www.google.com
  • google.com
  • https://www.google.com
+0

加入'?括號將使其不被捕獲。這有幫助嗎? –

+0

也許下面的相關主題將有所幫助:[我如何從Perl提取URL和鏈接文本從HTML?](http://stackoverflow.com/questions/254345/how-can-i-extract-url-and-link -text-from-html-in-perl) – Kenosis

+0

完美!謝謝! :)我仍然開放聽取更好的替代品@ m.buettner – fersarr

回答

3

非捕獲版本是這樣的:

m/(?:https?)?.*[.]com/g 

用於捕捉鏈接,我用這個表達式,從URI派生::查找:開盤後`權:

m<https?://[;/\?:\@&=+\$,\[\]A-Za-z0-9\-_.!~*'()%#]*[/\?:\@&=+\$\[A-Za-z0-9\-_!~*(%#]> 
5

你的做法是太天真了,也不會趕上許多其他的URL。 相反,使用正則表達式::常見,就像這樣:

use Regexp::Common qw/URI/; 

my @links = ($content =~ /$RE{URI}/g); 

這適用於HTTP,HTTPS,FTP等,並適當地捕獲的URL參數更高級的組合。

+0

謝謝!我以前使用過這些模塊(當我嘗試構建某種爬蟲機器人時),但我只是想知道爲了任何目的禁用括號!尤其不適用於URL。非常感謝 – fersarr

+0

@fersarr如果答案解決了您詢問的問題,請點擊向上/向下按鈕下方的*勾號*圖標接受答案。這將標記問題解決並獎勵回答問題的人,從而激勵他人回答您未來的問題。 –

+0

我確實標記了ysth的答案 – fersarr