2017-02-23 66 views
-4

我讀過多個關於正則表達式的教程,但它只是不會粘在我的腦海裏。我永遠無法讓我的模式工作。希望有人能幫忙。PHP的正則表達式最後一個地址的網址鏈接

我有一個PHP變量($內容),我需要找到一個特定的模式,看起來像這樣

http://localhost/Foodraveller/assets/images/upload/resize_image/fd1bf6aa02d5c39563c30b5035013141.jpg

我想搜索:

  • 我想「fd1bf6aa02d5c39563c30b5035013141 .jpg「URL鏈接的最後一個地址

任何幫助表示讚賞!謝謝!

+1

沒有試過,到目前爲止,我認爲 – Fallenhero

+0

PHP: - '$數據=爆炸( '/',$ link_string); echo $ data [count($ data)-1];' –

回答

1

你可以試試這個:

.*\/(.*) 

您在捕獲組獲得的數據1

Explanation

  1. .*匹配任何字符(除行終止)

  2. \/個匹配字符/字面上(區分大小寫)

  3. 第一捕捉(.*)集團其中.*任何字符匹配(除了線 終止子)

示例代碼

$re = '/.*\/(.*)/'; 
$str = 'http://localhost/Foodraveller/assets/images/upload/resize_image/fd1bf6aa02d5c39563c30b5035013141.jpg'; 

preg_match_all($re, $str, $matches); 
echo $matches[1][0]; 

Run it here

1

最簡單的使用模式是:

/([^\/?&]*)$/ 

說明:

()是捕獲組,說明你要捕捉什麼樣的格局中相匹配。

[ ]定義了一個匹配的字符集。裏面使用^表示「不」這些字符。我指定/(當然是轉義)以及?&(用於表示HTTP URI參數)來表示「匹配任何不是正斜槓,和符號或問號的字符」。

*是一個量詞,意思是「0或更多重複」。

最後,模式末尾使用的$表示「錨定到字符串末尾」。

該模式可以匹配代表文件名和參數的URI末尾的任何內容。如果你只想要不帶參數的文件名,我會建議使用:

/([^\/?&]*)(?:\?[^?]*)?$/ 

額外模式的說明:

(?: )是一個非捕獲組,用於指定一種模式。當你想添加一個量詞時這很有用。最後我使用了?,這意味着該模式可以發生「0或1次」。

[^?]*表示「匹配任何不是問號0或更多次的內容」。

此模式將匹配的網址,如下面:

http://www.example.com/ (no captured filename) 
http://www.example.com/file.js (capturing "file.js") 
http://www.example.com/?q=something (no captured filename) 
http://www.example.com/file.js?q=something (capturing "file.js") 

此外,一個真正好的正則表達式測試儀可在http://www.regex101.com/。它支持perl/php,Python,Javascript和Go。

這裏是最後的正則表達式的操作的鏈接:https://www.regex101.com/r/IwhSBr/1 雖然在右邊,它會說,該模式不只是文件名匹配的參數,每場比賽應該指出,「第1組」包含文件名或無。

+1

工程,但@ Maverick_Mrt的答案更有效率 – Fallenhero

0

在這裏看到一個工作演示http://phpfiddle.org/main/code/47jt-38y2

<?php 
$url="http://localhost/Foodraveller/assets/images/upload/resize_image/fd1bf6aa02d5c39563c30b5035013141.jpg"; 
$url=preg_replace('/(.)*\//',"",$url); 
echo $url; 

?>