2011-05-18 57 views
1

我一直在努力找出這個簡單的腳本。我是新來的正則表達式,所以請記住這一點。最重要的是,我已經嘗試過任何事情以及我所能做的一切。我試圖(學習,請不要指向我的API)從雅虎網站瀏覽器通過cURL或file_get_contents(都工作,只是搞亂不同的東西)下載TSV文件,然後使用正則表達式只顯示URL列。我意識到我可能有更多的運氣與其他功能,但我找不到任何與TSV有關的事情,現在它已成爲一項挑戰。我真的花了整整一天的時間來試圖解決這個問題。需要PHP的正則表達式幫助

因此,一個網址爲:

https://siteexplorer.search.yahoo.com/search?p=www.google.com&bwm=i&bwmo=&bwmf=s

而且我正則表達式目前看起來像這樣(我知道這是可怕的......它可能是百萬分之一的嘗試):

preg_match_all('((http(s?)://?(([^/]+(\/.+))))^[\t]$)', $dl, $matches); 

我的問題現在是有4列。 TITLE URL SIZE FORMAT。我能夠從第一列(TITLE)和最後一個(FORMAT)列中刪除所有內容,但我似乎無法刪除SIZE列,並且在鏈接網站時沒有最後一個斜槓最後的斜線。

另一件事 - 我實際上已經完成了讓JUST出現URL,但是他們都結束了斜槓,從Twitter中刪除了鏈接。

任何幫助將不勝感激!

+0

所以你想要分配'p' GET參數的URL? – alex 2011-05-18 03:07:17

+0

如果您正在學習,使用嵌入註釋的多行正則表達式格式是有意義的。它可以幫助你跟蹤你在編寫正則表達式時的想法。請參閱本頁的[添加註釋部分](http://net.tutsplus.com/tutorials/php/advanced-regular-expression-tips-and-techniques/)。 – 2011-05-18 03:24:05

+0

Anupam,感謝您的鏈接! – 714sooner 2011-05-18 04:34:22

回答

1

不知道很多關於PHP,但這個表達式在Python作品(應該是在PHP相同):

".+?\t(.+?)\t.*" 

只是比賽,並獲得第1組的內容.FWIW,Python代碼:

import re 
import fileinput 

urlre = re.compile(".+?\t(.+?)\t.*") 
for line in fileinput.input(): 
    m = urlre.match(line) 
    if m: 
     print m.group(1) 
+0

謝謝,正則表達式工作完美!你讓我意識到我過度思考所有事情......我一直在學習Google,Bing等的正則表達式 - 所以我很習慣更復雜的東西。很酷,謝謝! – 714sooner 2011-05-18 04:24:03

+0

順便說一句,我沒有足夠的代表給出任何。抱歉! – 714sooner 2011-05-18 04:32:45

+0

我很高興我能幫上忙。當我發現自己寫一個過於複雜的正則表達式時,像*這樣的不情願(懶惰)操作符?和+?通常是簡化一切的方法。 – 2011-05-18 06:53:48

1

就個人而言,我會按標籤分行。例如:

$stuff = file_get_contents($url); 

// split the whole file by newlines, to get an array of lines 
$lines = explode("\n", $stuff); 

// loop through the lines 
foreach ($lines as $line) { 
    // split by tab 
    $parts = explode("\t", $line); 

    // put the URLs in a list 
    $urls[] = $parts[1]; 

    // or keep track of them by title 
    $urls[$parts[0]] = $parts[1]; 

    // or whatever... 
} 
+0

感謝您的支持,雖然我很難讓它正常工作。我不斷收到一些通知,說明$ parts [1]是一個未定義的偏移量。不知道爲什麼...代碼有助於解釋如何閱讀TSV文件,但!如果我有代表,我會給一些! – 714sooner 2011-05-18 04:32:13

0

只需使用parse_url或parse_str代替。總是試圖找到比速度非常慢的正則表達式。