信息采集前两个笑话的时候 是正常的 当采集到第三个笑话的时候就出错了 然后后面的全部都出错
Notice: Undefined offset: 21 in D:\wamp\www\xx.php on line 32<?php
// 采集首页地址
$url = "http://cn.jokes.yahoo.com/jok/index.html";
// 获取页面代码
$r = file_get_contents($url); // 设置匹配正则
$preg='/hspace=5><a href="http:\/\/cn\.jokes\.yahoo.com\/(.*).html" class=list target=_blank>/isU';
// 进行正则搜索
preg_match_all($preg, $r, $title); // 计算标题数量
$count = count($title[1]);
// 通过标题数量进行内容采集
for($i=0;$i<$count;$i++) {
// 设置内容页地址
$jurl = "http://cn.jokes.yahoo.com/". $title[1][$i].".html";
// 获取内容页代码
$c = file_get_contents($jurl);
// 设置内容页匹配正则
$p = '/<div id="newscontent">(.*)<\/div>/isU';
// 进行正则匹配搜索
preg_match($p,$c,$content);
// 输出标题
echo "<h1>".$title[1][$i]."</h1><br>";
// 输出内容
echo $content[$i];
}
?>
Notice: Undefined offset: 21 in D:\wamp\www\xx.php on line 32<?php
// 采集首页地址
$url = "http://cn.jokes.yahoo.com/jok/index.html";
// 获取页面代码
$r = file_get_contents($url); // 设置匹配正则
$preg='/hspace=5><a href="http:\/\/cn\.jokes\.yahoo.com\/(.*).html" class=list target=_blank>/isU';
// 进行正则搜索
preg_match_all($preg, $r, $title); // 计算标题数量
$count = count($title[1]);
// 通过标题数量进行内容采集
for($i=0;$i<$count;$i++) {
// 设置内容页地址
$jurl = "http://cn.jokes.yahoo.com/". $title[1][$i].".html";
// 获取内容页代码
$c = file_get_contents($jurl);
// 设置内容页匹配正则
$p = '/<div id="newscontent">(.*)<\/div>/isU';
// 进行正则匹配搜索
preg_match($p,$c,$content);
// 输出标题
echo "<h1>".$title[1][$i]."</h1><br>";
// 输出内容
echo $content[$i];
}
?>
//================================================================
i :如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的。
m:默认的正则开始"^"和结束"$"只是对于正则字符串如果在修饰符中加上"m",那么开始和结束将会指字符串的每一行:每一行的开头就是"^",结尾就是"$"。
s:如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符! x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。
e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。
A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说"/a/A"匹配"abcd"。
E:与"m"相反,如果使用这个修饰符,那么"$"将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。
U:和问号的作用差不多,用于设置"贪婪模式"。
echo $content[0]; //返回全部括号()匹配成功的字符串
echo $content[1]; //返回第一个括号的()匹配成功的字符串
// 如果匹配表达式还有第二个括号 那么 $content[2]就是第二个括号匹配成功的字符串
//如果在进行匹配 它不会把值继续想数组后面插入 而是重新覆盖数组
error_reporting(E_ALL ^ E_NOTICE);