File_get_contents和Preg_match_all空数组

时间:2012-01-13 03:22:07

标签: php

我正在尝试匹配XML而不是超链接的文本,并将其列为超链接。但它只显示为数组..我做错了什么?感谢

<?php
$content = file_get_contents('http://phobos.apple.com/version');
$download = preg_match_all('~(.*)/iPhone/(.*)Restore.ipsw~', $content, $matches);
echo $matches[0];
?>

要转换为链接的示例文本 http://appldnld.apple.com/iPhone4/061-7939.20100908.Lcyg3/iPhone3,1_4.1_8B117_Restore.ipsw

如果匹配应列如下

2 个答案:

答案 0 :(得分:0)

根据{{​​3}},

$matches不是数组,而是数组数组

  

匹配
      根据标志排序的多维数组中所有匹配的数组。

默认flags参数为PREG_PATTERN_ORDER

  

对结果进行排序,以便$ matches [0]是一个完整模式的数组   匹配,$ matches [1]是由第一个匹配的字符串数组   带括号的子模式,依此类推。

因此,$matches[0]是符合正则表达式的字符串的数组$matches[1]是与{{1}对应的子字符串的数组\1是与$matches[2]对应的子串的数组。 E.g:

\2

因此,php >print_r($matches[2]); Array ( [0] => 061-4313.20080226.Sw39i/iPhone1,1_1.1.4_4A102_ [1] => 061-4313.20080226.Sw39i/iPhone1,1_1.1.4_4A102_ [2] => 061-4313.20080226.Sw39i/iPhone1,1_1.1.4_4A102_ [3] => 061-4313.20080226.Sw39i/iPhone1,1_1.1.4_4A102_ ... etc etc ) 指的是 ith 匹配的第j 个捕获组。 ($matches[j][i]是整个匹配字符串)。

答案 1 :(得分:0)

谢谢..所以我编码

<?php
$content = file_get_contents('http://phobos.apple.com/version');

$download = preg_match_all('~(.*)/iP(.*)Restore.ipsw~', $content, $matches, PREG_PATTERN_ORDER);

 echo "Key: <br>"; 
 print_r($matches[0]); 
 echo "<p>URL: <br>"; 
 print_r($matches[1]);
?>

虽然我需要将Text转换为Link我用一些教程

编码
<?php


    $content = file_get_contents('http://phobos.apple.com/version');

    $matches = "~(.*)/iP(.*)Restore.ipsw~";

    if(preg_match($matches, $content, $url)) {

    echo preg_replace($matches, '<a href="'.$url[0].'" rel="nofollow">'.$url[0].'</a>', $matches);

    }


?>

问题在于将文本转换为链接,它只显示1个超链接,其余部分不会显示。 http://codepad.org/v4YFfS7i