最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
PHP正则实战之匹配图片地址程序代码
时间:2014-06-14 编辑:简简单单 来源:一聚教程网
图片网址规范的html代码无非就是
《img title="??" src="/wp-admin/%E5%9B%A73" alt="??" title="??" /》
??和??是非必需的,若要通过XHTML认证??、??、??必不可少,??是核心内容,当然就不能少了。
就正则谈正则的话,我写出的最短匹配是
(?<=img.+?src=").*?(?=")
不过,这条在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=”之间定长基本上是不可能的。通常,图片地址的img和src只会相隔一个很简单的空格,但不排除某些情况在src之前,img后有alt、titlte等东西。
所以
(?<=img.src=").*?(?=")
或
(?<=img\ssrc=").*?(?=")
可能可以,但不保证100%没问题。
你也许会问,单纯
(?<=src=").*?(?=")
不行吗?通常情况,可以,但,搜索过页面的盆友应该知道,除了图片地址用src开头以外,javascript地址也用src开头!而且,太多神通广大的不可预知因素隐含其中,于是这个貌似很简短完美的写法就行不通了。
你又或许会问,聪明简短的不行,我把图片的后缀列出来,总该可以了吧,如
(?<=src=").*?\.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP)
的确,这个写法实在是很老实,不过,你见过没有后缀的图片?wwe.com 有很多这种例子呢
段一,匹配地址方法
内容:
代码如下 | 复制代码 |
PHP代码: $p = "/src=\"([^\"]+)/isu"; 结果: Array |
段二,
代码如下 | 复制代码 |
newstext=preg_replace(preg_replace('/(]+src\s*=\s*”?([^>"\s]+)”?[^>]*>)/im', ‘$1', $newstext); |
1.preg_replace和str_replace的区别:
str_replace只是纯字符替换,而preg_replace才是正则替换
2.$0,$1,$2等的说明:
$0指的是被整个模式所匹配的文本;
$1指的是首个 ( ) 引用的串;
$2指的是第二个()引用的串; 以此类推。
相关文章
- PHP导出数据超时的优化建议解读 10-31
- PHP之mysql位运算解析 10-31
- Laravel实现登录跳转功能解析 10-31
- php双向队列解读 10-31
- Laravel异常上下文解决教程 10-24
- php数组查询元素位置方法介绍 10-24