preg_match_all的用法与衍生程序
最近换空间发现了,以前的小偷程序。但是已经不能用了,百度已经换过版面了,于是就自己改下程序,还好用的是个开源的php程序。麻烦的是我不会php就只能边学边弄了,好了还是说下学习的结果吧preg_match_all的用法。
这个函数的说明就不写了,网上有很多,下面直接上实例:
<div id=”id1″>seo</div><div id=”id2″>seo2</div><div id=”id”>seo3</div>对上面的字符串取出相应的id与值。
/*
要求:
<div id=”id_1″>seo</div><div id=”id_2″>seo2</div><div id=”id_3″>seo3</div>对上面的字符串取出相应的id与值。
分析
字符串是一个简单的HTML元素,每一个DIV元素对应该一个ID和内容,并且是独立的,
首先考虑如何取出一个DIV内的ID值和内容,然后匹配其它类似的元素。一个DIV中需要取出两个值,也就是两个匹配的表达式,第一个表达式用于匹配ID值,第二个表达式用于匹配ID的内容。正则表达式常用的表达式使用小括号,那么前面的元素将会变成如下形式:
<div id=”(id)”>(seo)</div>
<div id=”(表达式1)”>(表达式2)</div>
使用如上小括号把需要匹配的区域进行了划分,接下来就是如何匹配各个表达式内的内容.
我们猜想一个ID可能是字母,数字或下划线,那这就变得简单了,使用中括号就可以实现
[a-zA-Z0-9_]+ (表示匹配大小写字母,数字和下划线)
[^<>]+ (表示不匹配<和>字符)
不能匹配<或>字符,因为如果匹配这两个字符将会把后面使用的DIV都匹配出来,因此需要排除这两个字符开始的元素,也就是不匹配以<或>字符
<div id=”(表达式1)”>(表达式2)</div>
<div id=”([a-zA-Z0-9_]+)”>([^<>]+ )</div>
preg_match_all(“<div id=”([a-z0-9_]+)”>([^<>]+)</div>”,$html,$result);
array(3)
[0]=> array(3)
[0][0]=> string(30) “<divid=”id_1″>seo</div>”
[0][1]=> string(33) “<divid=”id_2″>seo2</div>”
[0][2]=> string(33) “<divid=”id_3″>seo3</div>”
[1]=> array(3)
[1][0]=> string(5) “id_1″
[1][1]=> string(7) “id_2″
[1][2]=> string(7) “id_3″
[2]=> array(3)
[2][0]=>string(8) “seo”
[2][1]=>string(9) “seo2″
[2][2]=>string(9) “seo3″
共有三个表达式,分别显示每一个表达式匹配的值,并以数组的形式存储,这样就把每一个DIV元素的ID和内容取出。
使用正则表达式最主要还是要知道需要什么,然后跟椐需要进行匹配,并且思路清晰。
*/
一条评论
写的很好~~~支持一下~~