当前位置:  编程技术>php
本页文章导读:
    ▪php正则匹配图片路径的方法参考      php正则匹配图片路径:   代码示例: /<img.*src\s*=\s*[\"|\']?\s*([^>\"\'\s]*)/i 使用kindeditor保存文章,需要取出第N个图片的地址作为文章的标志图片,文章代码(内容的html)保存到数据库一个字段.........
    ▪php正则判断字符串是否为域名的方法分享      通常匹配域名的格式要求:   1、域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。 2、各级域名.........
    ▪小议php正则提取图片地址      在html页面中,图片网址规范的html代码一般为: <img src="/blog_article/囧1/index.html" title="囧2" alt="囧3" border="囧4" width="囧5" height="囧6" /> 囧2和囧4是非必需的,若要通过XHTML认证囧1、囧3、囧5、囧6必不可少。 就.........

[1]php正则匹配图片路径的方法参考
    来源: 互联网  发布时间: 2013-12-24

php正则匹配图片路径:
 

代码示例:
/<img.*src\s*=\s*[\"|\']?\s*([^>\"\'\s]*)/i

使用kindeditor保存文章,需要取出第N个图片的地址作为文章的标志图片,文章代码(内容的html)保存到数据库一个字段,然后图片地址保存到另外一个字段。

上面的地址是直接获取img标签内src属性的值。在使用该正则的php页面访问该路径如果能找到图片的话,可以直接使用,如果不能,可以使用preg_match_all将所有地址先保存到数组,然后处理路径,比如获取文件名称(不含路径部分),然后重新组成url,再删除图片。

例子:
 

代码示例:
preg_match_all("/<img.*src\s*=\s*[\"|\']?\s*([^>\"\'\s]*)/i",str_ireplace("\\","",$content),$arr);

内容部分被php给加上\转义了,需要先把\去除,str_ireplace("\\","",$content),然后将匹配的内容保存到$arr数组(二维的).
$arr[1]就是存储该路径的数组.

再谈php正则提取图片地址

参考之前的文章,小议php正则提取图片地址的方法,提取src=/blog_article/里面的图片地址还不足够,因为不能保证那个地址一定是绝对地址,完全的地址,如果那是相对的呢?如果地址诸如:_br/index.html> albums/Candids/thumb_P1050338.jpg
/content/media/touts/5271608/5271654/15320982
应该如何操作呢?

有时在这些地址前面需要加http://example1.com/ ,有些甚至要加http://example1.com/example2/.../,这太不现实了。

经过思索,原来:http://example.com/ 和http://example.com////// 是一样的!
http://img3./pics/nav/lg_main_a6.png

http://img3.////pics////nav///lg_main_a6.png
 
于是,对于一开始提到的两个相对地址如果要强行加入某前缀恢复成绝对地址的话,也不管前面有没有“/”,只管加一个“/”就好,“有杀错,没放过” 嘛,多一个显示仍会正常,但少一个“/”。


    
[2]php正则判断字符串是否为域名的方法分享
    来源: 互联网  发布时间: 2013-12-24

通常匹配域名的格式要求:
 

1、域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。
2、各级域名之间用实点(.)连接,三级域名的长度不能超过20个字符。
3、由多个标号组成的完整域名总共不超过255个字符。

匹配域名的正则:
 

1、由英文数字 和 “_”组成    [-a-z0-9]
2、每级要以“.”连接
3、三级不能域名长度不超过20 {1,20}

来看一个例子,

<?php
$url = 'www.test.com';
$search = '/---正则N---/';
if(preg_match($search,$url)){
 echo '匹配';
}else {
 echo '不匹配';
} //edit by www.
?>

以下正则表达式,均来源于网络,供大家学习参考。

正则1
\b([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\b
错误匹配:长度>60
 
正则2
^(([^-][a-z0-9A-Z-_]+\.)*)[^-][a-z0-9A-Z-_]+(\.[a-zA-Z]{2,4}){1,2}$
错误匹配:长度>60
错误匹配:www.te_st.com
 
正则3
(([\w\d\-_]+\.):?[^-_])+\w{2,4}
不匹配:test.com.cn
错误匹配:www.te_st.com
 
正则4
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?
暂无错误
 
正则5
(?<=\.)([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}
不能匹配二级域名
 
正则6
([a-z0-9][a-z0-9\-]*?\.(?:com|cn|net|org|gov|info|la|cc|co)(?:\.(?:cn|jp))?)$
一些顶级域名不能匹配,慎用。


    
[3]小议php正则提取图片地址
    来源: 互联网  发布时间: 2013-12-24

在html页面中,图片网址规范的html代码一般为:
<img src="/blog_article/囧1/index.html" title="囧2" alt="囧3" border="囧4" width="囧5" height="囧6" />
囧2和囧4是非必需的,若要通过XHTML认证囧1、囧3、囧5、囧6必不可少。
就正则谈正则的话,最短匹配为:
(?<=img.+?src="/blog_article/)/(/._")

不过,这条在php中会报错:
Warning: preg_match_all() [function.preg-match-all]: Compilation failed: lookbehind assertion is not fixed length at offset *** in ***

问题在(?<=img.+?src=")这个零宽断言里,在php中,零宽断言里不支持类似“*”、“+”这些无限次的东西,于是报错了,把“.+?”改为定长就好。不过,要“img”和“src=/blog_article/”之间定长基本上是不可能的。通常,图片地址的img和src只会相隔一个很简单的空格,但不排除某些情况在src之前,img后有alt、titlte等东西。_br/index.html> 所以
 

代码示例:
(?<=img.src="/blog_article/)/(/._")

(?<=img\ssrc="/blog_article/)/(/._")

单纯
(?<=src="/blog_article/)/(/._")
不行吗?
通常情况,可以,但除了图片地址用src开头以外,javascript地址也用src开头!

把图片的后缀列出来,是否可以呢?例如:
 

代码示例:
(?<=src=").*?\.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP)
 

你见过没有后缀的图片? 有很多这样的例子
 

RAW http://us./content/media/images/Headers/15559182
SmackDown http://us./content/media/images/Headers/15854138
NXT http://us./content/media/images/Headers/15929136
Superstars http://us./content/media/images/Headers/15815850
 

上面的网址都是图片,但都没有传统后缀,遇到这样的地址,还是会束手无策。

此时,可以这样:
<img(.*?)src="/blog_article/(/)(/._")
这次的结果中array[0]的内容不是我们想要的,我们要的图片地址在array[2]里。
因为用了2个 (.*?),每个“()”的东西会自动存在一个组里,而array[0]代表结果的汇总,array[1]包含了img和src里的所有东西,array[2]才轮到我们想要的图片地址。这种匹配方法,既能匹配有传统后缀的图片,也能匹配一些无后缀的图片文件,同时又不会杀错其它src=/blog_article/文件。_/p/index.html>

有关php正则提取图片地址的建议:
如果图片地址的格式是img空格src=/blog_article/这种形式,请使用:/index.html(?<=img.src="/blog_article/)/(/._") ,数组唯一。
否则,请使用<img(.*?)src="/blog_article/(/)(/._") ,记得留意有用内容所在的数组位置。

就介绍这些吧,写的有点乱,不过真的希望可以帮助大家理解php正则的用法。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3