修改PHP代码以从文档中提取特定字符串

时间:2012-02-08 21:49:56

标签: php regex

我使用以下代码从Twitter中提取一些用户名。到目前为止我所做的是 得到这些:

    [0] => com/USERNAME/statuses/167362593990778881USERNAME@twitter.
    [1] => com/ANOTHER_USERNAME/statuses/167362593390997506ANOTHER_USERNAME@twitter.

这是我的代码..我怎样才能只提取用户名?

    $file = file_get_contents("http://search.twitter.com/search.rss?q=twitter");
    $file = strip_tags($file);        

    preg_match_all("([a-z0-9!#$%&'*+/=?^_`{|}~-]*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)\b)siU", $file, $matches);

    echo '<pre>';
    print_r($matches);
    echo '</pre>';

我是使用simplexml完成​​的,但我只获得了第一个结果

$url="http://search.twitter.com/search.atom?q=hello";
$twitter_xml = simplexml_load_file($url); 

foreach ($twitter_xml->entry->author as $key) {
    $author = $key->{"uri"};

    echo"<li><h5>$author</h5></li>";
}

2 个答案:

答案 0 :(得分:5)

停止这样做。当你有多种结构合理,机器可读的格式时,使用正则表达式是愚蠢的。

您可以使用SimpleXML来解析RSS提要并提取所需的元素,或者您可以更轻松地使用JSON表示(http://search.twitter.com/search.json?q=twitter)并通过json_decode运行它来获取一个很好的PHP对象数组,你想要提取的所有数据已经​​为你完成了。

答案 1 :(得分:1)

强大的食谱:

  1. 解析器,可能是simpleXMLDOM,也许是其他人,
  2. xpath查询(//guid浮现在脑海中)。
  3. parse_url($content, PHP_URL_PATH);从网址
  4. 获取路径
  5. explode('/',$path)
  6. 获取该阵列的第一个条目。
  7. 现在,烹饪代码......