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

下面我來給大家介紹在php正則匹配圖片路徑原理與實現方法,有需要了解的朋友可進入參考參考。

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

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.douban.com/pics/nav/lg_main_a6.png

http://img3.douban.compicsnav///lg_main_a6.png

最終你都能到達

圖片網址規范的html代碼無非就是

1 ??

??和??是非必需的,若要通過XHTML認證??、??、??、??必不可少。

就正則談正則的話,我寫出的最短匹配是

1 (?<=img. ?src=").*?(?=")

不過,這條在php里不行,會出現:

1 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等東西。

所以

1 (?<=img.src=").*?(?=")

1 (?<=imgssrc=").*?(?=")

可能可以,但不保證100%沒問題。

你也許會問,單純

1 (?<=src=").*?(?=")

不行嗎?通常情況,可以,但,搜索過頁面的盆友應該知道,除了圖片地址用src開頭以外,javascript地址也用src開頭!而且,太多神通廣大的不可預知因素隱含其中,于是這個貌似很簡短完美的寫法就行不通了。

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

1 (?<=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

上面的網址都是圖片,但都沒有傳統后綴,你老實也沒用,還是不能獲取到它們。

怎么辦呢?還可以這樣

1

和上面的表達式不同,這次的結果中array[0]的內容不是我們想要的,我們要的圖片地址在array[2]里。為什么呢?因為我們用了2個 (.*?),每個“()”的東西會自動存在一個組里,而array[0]代表結果的匯總,array[1]包含了img和src里的所有東西,array[2]才輪到我們想要的圖片地址。這種匹配方法,既能匹配有傳統后綴的圖片,也能匹配一些無后綴的圖片文件,同時又不會殺錯其它src=文件。個人感覺還是不錯的,呵呵。當然了,如果你還有更好的建議,請馬上留言,全球人民都會感謝你!

你到底要什么樣的圖片,是固定格式還是其它?得具體情況具體分析呢。

我的建議是:

如果你要的圖片地址的格式是img空格src=的,請使用:(?<=img.src=").*?(?=") ,數組唯一,你懂的。

否則,請使用

并在項目中使用了很長時間的正則吧.

/"'s]*)/i

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

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

我的例子:

preg_match_all("/"'s]*)/i",str_ireplace("\","",$content),$arr);

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

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392365.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392365.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392365.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java項目經驗行業_行業研究以及如何炫耀您的項目

java項目經驗行業蘋果 | GOOGLE | 現貨 | 其他 (APPLE | GOOGLE | SPOTIFY | OTHERS) Editor’s note: The Towards Data Science podcast’s “Climbing the Data Science Ladder” series is hosted by Jeremie Harris. Jeremie helps run a data science mentorship startup…

MongoDB教程-使用Node.js從頭開始CRUD應用

In this MongoDB Tutorial from NoobCoder, you will learn how to use MongoDB to create a complete Todo CRUD Application. This project uses MongoDB, Node.js, Express.js, jQuery, Bootstrap, and the Fetch API.在NoobCoder的MongoDB教程中&#xff0c;您將學習如何使…

leetcode 399. 除法求值(bfs)

給你一個變量對數組 equations 和一個實數值數組 values 作為已知條件&#xff0c;其中 equations[i] [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi values[i] 。每個 Ai 或 Bi 是一個表示單個變量的字符串。 另有一些以數組 queries 表示的問題&#xff0c;其中 queries[j]…

【0718作業】收集和整理面向對象的六大設計原則

面向對象的六大設計原則 &#xff08;1&#xff09;單一職責原則——SRP &#xff08;2&#xff09;開閉原則——OCP &#xff08;3&#xff09;里式替換原則——LSP &#xff08;4&#xff09;依賴倒置原則——DIP &#xff08;5&#xff09;接口隔離原則——ISP &#xff08;…

數據科學 python_適用于數據科學的Python vs(和)R

數據科學 pythonChoosing the right programming language when taking on a new project is perhaps one of the most daunting decisions programmers often make.在進行新項目時選擇正確的編程語言可能是程序員經常做出的最艱巨的決定之一。 Python and R are no doubt amon…

如何進行有效的需求調研

一、什么是需求調研&#xff1f;需求調研對于一個應用軟件開發來說&#xff0c;是一個系統開發的開始階段&#xff0c;它的輸出“軟件需求分析報告”是設計階段的輸入&#xff0c;需求調研的質量對于一個應用軟件來說&#xff0c;是一個極其重要的階段&#xff0c;它的質量在一…

java中直角三角形第三條邊,Java編程,根據輸入三角形的三個邊邊長,程序能判斷三角形類型為:等邊、等腰、斜角、直角三角形,求代碼...

private static Scanner sc;private static int edge[] new int[3];public static void main(String[] args) {System.out.println("請輸入三角形的三條邊");sc new Scanner(System.in);input();}public static void input() {int index 0;//數組下標while (sc.ha…

react中使用構建緩存_使用React和Netlify從頭開始構建電子商務網站

react中使用構建緩存In this step-by-step, 6-hour tutorial from Coding Addict, you will learn to build an e-commerce site from scratch using React and create-react-app.在這個Coding Addict的分步&#xff0c;為時6小時的教程中&#xff0c;您將學習使用React和creat…

Django+Vue前后端分離項目的部署

部署靜態文件&#xff1a; 靜態文件有兩種方式 1&#xff1a;通過django路由訪問 2&#xff1a;通過nginx直接訪問 方式1&#xff1a; 需要在根目錄的URL文件中增加 url(r^$, TemplateView.as_view(template_name"index.html")),作為入口&#xff0c;在setting中更改…

leetcode 547. 省份數量(bfs)

有 n 個城市&#xff0c;其中一些彼此相連&#xff0c;另一些沒有相連。如果城市 a 與城市 b 直接相連&#xff0c;且城市 b 與城市 c 直接相連&#xff0c;那么城市 a 與城市 c 間接相連。 省份 是一組直接或間接相連的城市&#xff0c;組內不含其他沒有相連的城市。 給你一…

r怎么對兩組數據統計檢驗_數據科學中最常用的統計檢驗是什么

r怎么對兩組數據統計檢驗Business analytics and data science is a convergence of many fields of expertise. Professionals form multiple domains and educational backgrounds are joining the analytics industry in the pursuit of becoming data scientists.業務分析和…

win10專業版激活(cmd方式)

轉載于:https://www.cnblogs.com/bug-baba/p/11225322.html

mit景觀生成技術_永遠不會再為工作感到不知所措:如何使用MIT技術

mit景觀生成技術by Sihui Huang黃思慧 永遠不會再為工作感到不知所措&#xff1a;如何使用MIT技術 (Never feel overwhelmed at work again: how to use the M.I.T. technique) Have you ever felt exhausted after a day at work? At the end of a busy day, you couldn’t …

leetcode 189. 旋轉數組

給定一個數組&#xff0c;將數組中的元素向右移動 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: [1,2,3,4,5,6,7] 和 k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右旋轉 1 步: [7,1,2,3,4,5,6] 向右旋轉 2 步: [6,7,1,2,3,4,5] 向右旋轉 3 步: [5,6,7,1,2,3,4] 代碼 cla…

aws ec2 php,如何使用php aws sdk啟動和停止ec2實例

以下是從定義的AMI啟動計算機的基本示例&#xff1a;$image_id ami-3d4ff254; //Ubuntu 12.04$min 1; //the minimum number of instances to start$max 1; //the maximum number of instances to start$options array(SecurityGroupId > default, //replace with your …

python3 遞歸

遞歸調用&#xff1a;  在調用一個函數的過程中&#xff0c;直接或者簡介調用了該函數本身 必須有一個明確的結束條件 遞歸特性:  1. 必須有一個明確的結束條件  2. 每次進入更深一層遞歸時&#xff0c;問題規模相比上次遞歸都應有所減少  3. 遞歸效率不高&#xff0c;…

深度學習概述_深度感測框架概述

深度學習概述I have found the DeepSense framework as one of the promising deep learning architectures for processing Time-Series sensing data. In this brief and intuitive overview, I’ll present the main ideas of the original paper titled “Deep Sense: A Un…

css響應式網格布局生成器_如何使用網格布局模塊使用純CSS創建響應表

css響應式網格布局生成器TL; DR (TL;DR) The most popular way to display a collection of similar data is to use tables, but HTML tables have the drawback of being difficult to make responsive.顯示相似數據集合的最流行方法是使用表&#xff0c;但是HTML表具有難以響…

Axure注冊碼

適用版本 Axure 8.1.0.3377 zdfans.com gP5uuK2gHiIVO3YFZwoKyxAdHpXRGNnZWN8Obntqv7FF3pAz7dTu8B61ySxli 轉載于:https://www.cnblogs.com/mengjianzhou/p/11226260.html

命令行窗口常用的一些小技巧

一. 打開命令行窗口的方式 1. 按住【shift】鍵&#xff0c;在桌面右擊&#xff0c;選擇“在此處打開命令行窗口(W)”,如下圖所示&#xff1a; 2. 按住【開始】 R快捷鍵&#xff0c;彈出運行窗口&#xff0c;輸入cmd&#xff0c;回車&#xff08;確定&#xff09;即可。 二. 常用…