日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > php教程 > php正則匹配圖片路徑原理與方法

php正則匹配圖片路徑原理與方法

來源:程序員人生   發(fā)布時間:2014-02-20 21:50:49 閱讀次數(shù):3077次

提取src=里面的圖片地址還不足夠,因為不能保證那個地址一定是絕對地址,完全的地址,如果那是相對的呢?如果地址諸如:

albums/Candids/thumb_P1050338.jpg

/content/media/touts/5271608/5271654/15320982

那該如何是好?有時在這些地址前面需要加http://phpfensi.com/,有些甚至要加http://phpfensi.com/example2/.../ 于是,要寫出出一種法則符合所有要求,簡直是天方夜譚,只能見機行事對癥下藥,有時,需要從前面動刀,有時需要從后面砍斷。

今天,我驚訝地知道了一個道理,原來http://phpfensi.com/ 和http://phpfensi.com////// 是一樣的!

http://img3.phpfensi.com/pics/nav/lg_main_a6.png 和

http://img3.phpfensi.com////pics////nav///lg_main_a6.png

最終你都能到達,圖片網(wǎng)址規(guī)范的html代碼無非就是:

1 <img src="??" title="??" alt="??" border="??" width="??" height="??" /> 

??和??是非必需的,若要通過XHTML認證??、??、??、??必不可少,就正則談正則的話,我寫出的最短匹配是 (?<=img.+?src=").*?(?="),不過,這條在php里不行,會出現(xiàn):

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: lookbehind assertion is not fixed length at offset *** in *** 

糾結(jié)了很久,都不行,原因何在呢?試了很多次,終于發(fā)現(xiàn)問題在(?<=img.+?src=")這個零寬斷言里,在php中,零寬斷言里不支持類似“*”、“+”這些無限次的東西,于是報錯了,把“.+?”改為定長就好。不過,要“img”和“src=”之間定長基本上是不可能的。通常,圖片地址的img和src只會相隔一個很簡單的空格,但不排除某些情況在src之前,img后有alt、titlte等東西,所以

(?<=img.src=").*?(?=") 或 (?<=imgssrc=").*?(?=") 可能可以,但不保證100%沒問題,你也許會問,單純 (?<=src=").*?(?=") 不行嗎?通常情況,可以,但,搜索過頁面的盆友應該知道,除了圖片地址用src開頭以外,javascript地址也用src開頭!而且,太多神通廣大的不可預知因素隱含其中,于是這個貌似很簡短完美的寫法就行不通了。

你又或許會問,聰明簡短的不行,我把圖片的后綴列出來,總該可以了吧,如

(?<=src=").*?.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP) 

的確,這個寫法實在是很老實,不過,你見過沒有后綴的圖片?wwe.com 有很多這種例子呢

RAW http://us.wwe.com/content/media/images/Headers/15559182 

SmackDown http://us.wwe.com/content/media/images/Headers/15854138 

NXT http://us.wwe.com/content/media/images/Headers/15929136 

Superstars http://us.wwe.com/content/media/images/Headers/15815850

上面的網(wǎng)址都是圖片,但都沒有傳統(tǒng)后綴,你老實也沒用,還是不能獲取到它們,怎么辦呢?還可以這樣:<img(.*?)src="(.*?)(?=") 

和上面的表達式不同,這次的結(jié)果中array[0]的內(nèi)容不是我們想要的,我們要的圖片地址在array[2]里。為什么呢?因為我們用了2個 (.*?),每個“()”的東西會自動存在一個組里,而array[0]代表結(jié)果的匯總,array[1]包含了img和src里的所有東西,array[2]才輪到我們想要的圖片地址。這種匹配方法,既能匹配有傳統(tǒng)后綴的圖片,也能匹配一些無后綴的圖片文件,同時又不會殺錯其它src=文件,個人感覺還是不錯的.

你到底要什么樣的圖片,是固定格式還是其它?得具體情況具體分析呢,我的建議是:如果你要的圖片地址的格式是img空格src=的,請使用:(?<=img.src=").*?(?=") ,數(shù)組唯一,你懂的。

否則,請使用<img(.*?)src="(.*?)(?="),記得留意有用內(nèi)容所在的數(shù)組位置哦,并在項目中使用了很長時間的正則吧.

/<img.*srcs*=s*["|']?s*([^>"'s]*)/i

我使用kindeditor保存文章,但是需要取出第N個圖片的地址作為文章的標志圖片,文章代碼(內(nèi)容的html)保存到數(shù)據(jù)庫一個字段,然后圖片地址保存到另外一個字段.我就是使用上面的正則解決的.

我說明下,上面的地址是直接獲取img標簽內(nèi)src屬性的值.在使用該正則的php頁面訪問該路徑如果能找到圖片的話,可以直接使用,如果不能,你可以使用preg_match_all將所有地址先保存到數(shù)組,然后處理路徑,比如獲取文件名稱(不含路徑部分),然后重新組成url,再刪除圖片.

我的例子:

preg_match_all("/<img.*srcs*=s*["|']?s*([^>"'s]*)/i",str_ireplace("","",$content),$arr);

呵呵 我的內(nèi)容部分被php給加上轉(zhuǎn)義了,所以我需要先把去除,str_ireplace("","",$content),然后將匹配的內(nèi)容保存到$arr數(shù)組(二維的).

$arr[1]就是存儲該路徑的數(shù)組.

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲嫩草 | 国产在线精品自拍 | 国产一区不卡 | 中文字幕亚洲综合久久久软件 | 欧美一级毛片免费的视频 | 欧美一区二区三区四区视频 | 亚洲黄色片 | 久久久国产一区二区三区 | 国产精品久久久久久久久久久久冷 | 欧美成人精品一区二区三区 | 麻豆av在线播放 | 91久久精品人人做人人爽综合 | 国产欧美精品区一区二区三区 | 精品久久电影 | 国产精品视频导航 | 国产丝袜一区二区三区免费视频 | www.日韩av | 日韩| 精品国产91乱码一区二区三区 | 色www永久免费视频首页在线 | 高清欧美精品xxxxx在线看 | 欧美成人精品一区 | 精品中文字幕视频 | 欧美日韩乱国产 | av在线播放一区 | 毛片免费高清 | 久久久888| 国产精品久久久99 | 国产免费看 | 亚洲综合欧美 | 国产女人成人精品a区 | 亚洲精品不卡 | 国产乱色国产精品播放视频 | 日本亚洲天堂 | 午夜激情视频网站 | 伊人影院久久 | 国产玖玖视频 | 亚洲福利视频在线 | 一区二区三区香蕉视频 | 天堂av一区二区 | 亚洲国产综合网 |