PHP正则表达式提取html超链接中的href地址
用php的正则表达式相关函数,实现提取html超链接<a href="地址"></a>中的地址。
代码如下 | 复制代码 |
<?php $preg='/<a .*?href="(.*?)".*?>/is'; $str ='<a href="链接1">URLNAME</a>文本段1<a href="链接2" target="_blank">URLNAME</a>文本段2<a target="_blank" href="链接3">URLNAME</a>...文本段n'; preg_match_all($preg,$str,$match);//在$str中搜索匹配所有符合$preg加入$match中 for($i=0;$i<count($match[1]);$i++)//逐个输出超链接地址 { echo $match[1][$i]."<br />"; } ?> |
最终输出:
链接1<br />链接2<br />链接3<br />
附一个
PHP的正则表达式提取图片地址的代码。
代码如下 | 复制代码 |
$str='<p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_4.jpg" alt=""/></p><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_3.jpg" alt=""/></p><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/></p>'; $pattern="/<[img|IMG].*?src=['|"](.*?(?:[.gif|.jpg]))['|"].*?[/]?>/"; preg_match_all($pattern,$str,$match); print_r($match); |
1、值赋值:将赋值表达式的值复制到变量。例子:
代码如下 | 复制代码 |
$number=15; |
2.创建数组有变量赋值和调用函数两种方法,这里先讲前者。
使用变量赋值方法很简单,直接给一个数组变量赋值即可。
实例:
代码如下 | 复制代码 |
<?php |
三个赋值语句产生的数组内容:
0=>php
1=>html
2=>css
3、引用赋值:所创建的变量与另一个变量引用的内容相同。因此如果多个变量引用了同一内容,修改其中任一个变量,在其余的变量上都会有反映。在等号后面加一个&符号($val2=& $val1)就可以完成引用赋值或者将&符号放在引用的变量前面($val2= &$val1):
代码如下 | 复制代码 |
$val1="hello"; $val1 is goodby |
foreach引用赋值的问题
代码:
代码如下 | 复制代码 |
<?php $a = array(
} print_r($a); |
----------------------
仔细想想,其实是简单的引用问题,第一次foreach完毕,$v实际是$a['c']的引用,循环时,每次对$v的赋值都会会改变$a['c']的值,而最后一次对$v的赋值是$v=$a['c'],$a['c']在上一次被赋值为$a['b'],所以会会出现上述情况
header()函数在php的使用很大,下面我来介绍利用它实现页面缓存的一些方法,但使用header前必须注意,在它之前不能任何输出,包括空格。手册上,我们对于cache都是写着如何设置,以便让代码不被cache:
代码如下 | 复制代码 |
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); // HTTP/1.1 |
而且在设置的时候还得注意在header前不能有输出,否则header设置无效,但都没有写过,如何给页面设置Cache,虽然我们知道有一些办法,比如 E-TAG之类的。当然也有简单的设置:
比如我们在输出前,对内容进行md5,将它当成e-tag只要没变化,就不会有影响。也有其他的方式:
代码如下 | 复制代码 |
$seconds_to_cache = 3600; |
缓存1小时,主要是过期时间得用gmdate来设置,而不是date,这个要注意,其他都差不多。maxage要和expire能够对得上。
对于PHP产生的动态内容,只需要在内容输出之前输出强制缓存的header即可,比如下面的代码即要求浏览器缓存文件1个月:
代码如下 | 复制代码 |
<?php $offset = 30*60*60*24; // cache 1 month |
对于静态文件,一般的服务器都支持第3级缓存状态。要想达到第四级的缓存效果,要么像之前GZIP压缩那样,用PHP外包一层,然后用PHP处理。要么需要服务器端的支持,APACHE的一个模块mod_expires支持给文件添加expires header。把下面的代码加入你的blog目录下的.htaccess文件,如果你的服务器安装了mod_expires模块,则将自动生效,图片等强制缓存一个月,html文档缓存10分钟。如果该模块没有安装,也不会出错。
代码如下 | 复制代码 |
<IfModule mod_expires.c> |
在这里有mod_expires更详细的文档和教程。不过我要说明的是,mod_expires在绝大多数服务器上都没安装
核心代码
代码如下 | 复制代码 |
$t1 = microtime(true); |
上面为核心代码下面我们详细的来介绍一下
代码如下 | 复制代码 |
|
数组排序最常用的函数就是 sort($arr); 它的作用是按数组的键值升序排列,并且排序后的数组键名不再是原来的键名,是按新数组来重新设置的键名。
而有时我们要求更复杂的排序。如按键名排序,这里用到 ksort($arr); 函数,它会根据数组的键名排序,并维持原有的键值关系。相对应的 asort($arr); 函数,是按键值排序,且维持原有的键值关系。
同样原理,rsort(); arsort(); krsort(); 函数除了排序是按降序排列外,其它与sort(); rsort(); ksort(); 相同。
数组操作是PHP很重要的基础,希望能好好运用。
按键值排序
即按标识符ASCⅡ码值的大小排列顺序。
ksort(): 按照数组标识符顺序排列
krsort(): 按照数组标识符逆序排
实例1:
代码如下 | 复制代码 |
<?php |
按元素值排序
asort(): 按照由小到大的顺序对数组排序;
rsort(): 按照由大到小的顺序对数组逆序排序。
将实例1的8-11行代码改为:
代码如下 | 复制代码 |
asort($languages); |
删除原有键名排序
sort(): 按照由小到大的顺序对数组排序;
rsort(): 按照由大到小的顺序对数组逆序排序。
将实例2的8-11行代码改为:
代码如下 | 复制代码 |
sort($languages); |
array_multisort -- 对多个数组或多维数组进行排序
说明
bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]] )
例子 1. 对多个数组排序
代码如下 | 复制代码 |
<?php var_dump($ar1); |
本例中经过排序后,第一个数组将包含 "10","a",100,100。第二个数组将包含 1,1,"2",3。第二个数组中的项目顺序完全和第一个数组中相应的项目(100 和 100)顺序一致。
代码如下 | 复制代码 |
array(4) { |
例子 2. 对多维数组排序
代码如下 | 复制代码 |
<?php
|
本例中经过排序后,第一个数组将包含 10,100,100,"a"(作为字符串上升排序),第二个数组将包含 1,3,"2",1(作为数值下降排序)。
PHP数组排序函数很多,也很强大
如:arsort,asort,krsort,ksort,sort…
但有时候还是满足不了我们的需求
假如有一个二维数组,我们要按二维数组中的一个值来排序
就需要用到了usort自定义数组排序
例子如下:
代码如下 | 复制代码 |
<?php $aa = array (array ("score"=>60), array ("score"=>70), array ("score"=>80), array ("score"=>90), array ("score"=>20), array ("score"=>10), array ("score"=>50), array ("score"=>30)); echo '------排序前输出------<br />'; var_dump($aa); // 排序前输出 usort($aa, "cmp"); // 排序处理(从大到小) echo '<br />------排序后输出------<br />'; var_dump($aa); // 排序完输出 /** * 自定义排序条件 * @param array $a * @param array $b * @return bool */ function cmp($a, $b) { if ($a["score"] == $b["score"]) { return 0; } return ($a["score"] < $b["score"]) ? 1 : -1; } ?> |
输出结果:
代码如下 | 复制代码 |
------排序前输出------ |
相关文章
- 取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
- 今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
- 这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
- 正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
- 常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
- 网址规则是可寻的,所以我们可以使用正则表达式来提取字符串中的url地址了,下面一起来看看小编整理的几个PHP正则表达式匹配验证提取网址URL实例. 匹配网址 URL 的...2016-11-25
- 这篇文章主要介绍了正则表达式中两个反斜杠的匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
- 这篇文章给大家详细介绍了JS中使用正则表达式g模式和非g模式的区别,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2017-04-03
- 这篇文章主要介绍了C#正则表达式使用方法,大家参考使用...2020-06-25
- c#正则表达式,用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。...2020-06-25
- 本文主要介绍了JavaScript利用正则表达式替换字符串中内容的具体实现方法,并做了简要注释,便于理解。具有一定的参考价值,需要的朋友可以看下...2017-01-09
- 这篇文章主要介绍了python正则表达式常用函数及使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
- 这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-07-21
- 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配,因为我想学完之后写个语法高亮练手,所以用js代码当作例子...2021-05-07
- 今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
- 正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧...2020-06-25
- 这篇文章主要给大家介绍了关于利用Python验证的50个常见正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-11
- 这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...2020-06-25
- 这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06