需要PHP Regex帮助

时间:2011-05-18 03:02:14

标签: php regex

我整天都在努力研究这个简单的脚本。我是正则表达式的新手所以请记住这一点。最重要的是,我已经尝试过任何可以让它发挥作用的所有事情。

我正在尝试(学习,请不要指向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的链接。

非常感谢任何帮助!

3 个答案:

答案 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。总是试着找到除了非常慢的正则表达式以外的任何东西。