我整天都在努力研究这个简单的脚本。我是正则表达式的新手所以请记住这一点。最重要的是,我已经尝试过任何可以让它发挥作用的所有事情。
我正在尝试(学习,请不要指向API)从Yahoo Site Explorer通过cURL或file_get_contents下载TSV文件(两者都有效,只是弄乱了不同的东西),然后使用正则表达式只获取要显示的URL列。我意识到我可能会有更多的运气与其他功能,但我找不到任何与TSV有关的事情,现在它已经成为一个挑战。我真的花了整整一天试图弄清楚这一点。
所以URL就是:
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 :(得分: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...
}
答案 1 :(得分: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)
答案 2 :(得分:0)
请改用parse_url或parse_str。总是试着找到除了非常慢的正则表达式以外的任何东西。