700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php 匹配图片路径_PHP正则实战之匹配图片地址程序代码

php 匹配图片路径_PHP正则实战之匹配图片地址程序代码

时间:2020-05-17 22:20:31

相关推荐

php 匹配图片路径_PHP正则实战之匹配图片地址程序代码

图片网址规范的html代码无非就是

《img title="??" src="/wp-admin/%E5%9B%A73" alt="??" title="??" width="5" height="6" /》

??和??是非必需的,若要通过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)

的确,这个写法实在是很老实,不过,你见过没有后缀的图片? 有很多这种例子呢

段一,匹配地址方法

内容:

代码如下

PHP代码:

$p = "/src=\"([^\"]+)/isu";

//$p = "/]+>/isu";

//$p = "/]+>/isu";

preg_match_all($p, $html, $m);

var_dump($m);

结果:

Array

(

[0] => Array

(

[0] => src="/pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg

[1] => src="/pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg

[2] => src="/pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg

[1] => Array

(

[0] => /pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg

[1] => /pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg

[2] => /pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg

)

)

段二,

代码如下

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指的是第二个()引用的串;以此类推。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。