导航:首页 > 编程语言 > php执行正则表达式

php执行正则表达式

发布时间:2025-05-05 23:43:32

A. 怎么用php正则获得a标签内的文字啊

php中正则匹配只要使用这两个函数:

preg_match_all

preg_match

这里使用preg_match_all,代码如下:

$subject='<ahref="xxx.php">abc测试</a>';//假设这是需要匹配的字符串

$pattern='/<ahref="[^"]*"[^>]*>(.*)</a>/';//这是匹配的正则表达式

preg_match_all($pattern,$subject,$matches);//开始匹配,该函数会把匹配结果放入$matches数组中


echo"<pre>";
print_r($matches);
/**
结果是:

Array
(
[0]=>Array
(
[0]=>abc测试
)

[1]=>Array
(
[0]=>abc测试
)

)

*/

B. php正则表达式

优先匹配哪个?
通常是优先匹配左边的(从左往右执行嘛,然后又因为有贪婪性,比如[0-9]*[0-9]*去匹配123,左边的[0-9]*会匹配到12,右边的[0-9]*会匹配到3),正则表达式左边的部分会匹配到能是能使匹配成功的最长的匹配,具体原因如下:
贪婪、回溯和正则导向引正则擎的急切性:正则的{}和*合+有具贪婪性会向后匹配到他们可以匹配的尽可能多的字符串。但是如果重复性的匹配会引起整个(后面的)正则表达式匹配失败时,会引起回溯,放弃最后一次重复匹配(相当于剩余的字符串从左边增加了一位),用表达式后面的部分匹配剩余的字符串。在前面的正则匹配成功后立即用剩余的表达式部分继续匹配后面的内容,如果匹配成功会立刻返回匹配成功,不会继续回溯(php的正则表达式引擎室正则导向的)


里面的(.*)是怎么找得?
*有具贪婪性会向后匹配到.可以匹配的最大长度的字符串,最初匹配到-2011-2012,然后因为回溯不断减少匹配的值,直到匹配-201。

过程是怎样的,
执行顺序:
1.[0-9]{2,4}会先匹配到2010,
2.然后(.*),因为*得贪婪性会匹配到后面所有.能匹配的字符-2011-2012。
3.此时表达式执行到[0-9]{1,2},因为[0-9]{1,2}此时没有任何可以匹配的内容,所以引起回溯(.*)匹配到前一次匹配结果的倒数第2位重新匹配到-2011-201,[0-9]{1,2}与最后一位匹配成功得到字符串最后面的2,因为正则引擎的急切性,匹配成功后会立即用正则表达式剩余的部分继续向后匹配。
4.此时表达式执行到\1,字符串后面没有剩下任何东西所以\1 (\1指(.*)匹配的结果-2011-201)匹配失败,然后引起回溯。[0-9]{1,2}向前移一位,结果[0-9]{1,2}没有字符可以进行匹配操作,匹配失败。引起回溯,(.*)匹配到前一次匹配结果的倒数第2位重新匹配到-2011-20,再用[0-9]{1,2}匹配得到12,后面依然没有字符与\1匹配,引起回溯,此次[0-9]{1,2}匹配到1,\1(此时值为-2011-20)与2匹配再次失败。于是重复上面的回溯【此处省去n百字,总之是重复上面的回溯】,直到(.*)匹配到-201,\1匹配到了-2012中的-201,因为正则导向的正则引擎是急切的,不再进行回溯,继续后面的匹配。
5.最后,[0-9]{1,2}与字串剩余部(最后一个字符)2匹配成功返回,因为正则导向的正则引擎是急切的,所以立刻返回匹配结果,不再进行回溯。

睡觉前看到的没想到写出来这么难,不过也没白写,就当总结了。

阅读全文

与php执行正则表达式相关的资料

热点内容
apache22安装php 浏览:831
安卓机便签绘画怎么放大 浏览:387
对啊app电子教材怎么下载 浏览:338
地下车库加密多少合适 浏览:688
pythonmysql配置 浏览:577
云服务器密码生成器 浏览:987
码头提还柜app怎么操作的 浏览:836
三国志11汉化包在哪个文件夹 浏览:926
java订单系统源码 浏览:487
php开源视频系统 浏览:222
程序员自我隔离 浏览:97
kd与其它指标叠加源码图片 浏览:792
arcgis在云服务器上安装无反应 浏览:953
服务器bmc刷一半怎么办 浏览:371
phppdf打印 浏览:665
向量范数的源码 浏览:81
查找隐藏的文件夹win7 浏览:596
怎么才能玩我的世界正版服务器 浏览:147
邮箱中发件服务器是什么 浏览:219
菜鸟app怎么设置快递不放菜鸟驿站 浏览:795