首先说明一下读吧采集规则中正则表达式的基本结构。
以“|<a href="view_book\.asp\?id=(\d+)" title=.*>(.*)</a>|isU”为例。
开始和末尾的“|”和“|isU”,是起始符和结束符,必须得跟上,其含义无需了解。
中间部分,就是相应的字符串了。字符串含义:
复制内容到剪贴板
代码:
小括号((和))括起来的,就是要匹配出来的内容,不括就不匹配。
点号(.)表示任意字符。
\d 表示数字。
星号(*)表示任意长度0个到无数个。
加号(+)表示任意长度1个到无数个。
问号(?)表示任意长度0个到1个。如上所言的字符串或字符由于都有特定含义,所以如果在要匹配的字符串中出现上述字符,就需要转义,即用转义符“\”放在前面表示后面跟着的是一个符号。
而3.3中,细心的朋友可以发现“/”前面不再需要转义符了,因为起始结束符使用了“|”而不是原来的“/”,所有不会和内容里面的“/”冲突了,就不再需要進行转义了。
所以原字符串为“<a href="view_book.asp?id=1234" title=xxxxx>xxxxxxxxxx</a>”,匹配1234和xxxxxxxxxx的正则就为“<a href="view_book\.asp\?id=(\d+)" title=.*>(.*)</a>”,其中.和?需要转义,所以前面带了斜划线。
另举例:
匹配“<a href="(view_book).asp?id=1234" title=xxxxx>xxxxxxxxxx</a>”,匹配的正则就应该是“<a href="\(view_book\)\.asp\?id=(\d+)" title=.*>(.*)</a>”。注意前面的括号因为代表的是字符串中的字符,所以需要加上转义符匹配。
另外提供给大家一个示范代码,可以用来检测自己写的正则是否正常:
将一下内容保存为a.php文件,上传到服务器上运行查看结果即可知能否匹配出来以及匹配的结果是否正常:
复制内容到剪贴板
代码:
<?
$a='
<a href="view_book.asp?id=218192" title="本章字数:5460
更新日期:2007-6-10 14:14:09">2、魔鬼亲临的童年</a></td>
';
$b='|<a href="view_book\.asp\?id=(\d+)" title=.*>(.*)</a>|isU';
preg_match_all($b, $a ,$a);
print_r($a);其中这个“$a=”后面,“;”的前面,两者中间写上你要检测的匹配字符串。
这里“$b=”后面,“;”前面写上你的正则。