2009-10-03 41 views
0

這裏是主題:如何編寫正則表達式來查找URL中的一個目錄?

http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov 

什麼,我需要使用正則表達式只是位前的最後/(包括最後/太) 的937IPiztQG字符串可能改變;它將包含a-z A-Z 0-9 - _

這裏是我的嘗試:

$code = strstr($url, '/http:\/\/www\.mysite\.com\/files\/get\/([A-Za-z0-9]+)./'); 

編輯:我需要使用正則表達式,因爲我真的不知道該URL。我有這樣的字符串...

<a href="http://www.mysite.com/files/get/1B-MenlPW0/my-file.doc">a song</a> 
<a href="http://www.mysite.com/files/get/1ZeR5KEo9x/my-song.mp3">more text</a> 
<a href="http://www.mysite.com/files/get/8IySvO5gMD/my-video.avi">oh and here goes some more blah blah</a> 

我需要它來讀取該字符串並切斷URL的文件名部分。

+0

別介意我找到了解決的$ M陣列 – Imran 2009-10-04 20:36:55

回答

4

你真的不需要這裏的正則表達式。這裏有一個簡單的解決方案:

echo basename(dirname('http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov')); 
// echoes "937IPiztQG" 

另外,我想引用傑米·薩溫斯基:

「有些人,當遇到一個問題,認爲「我知道,我將使用正表達式「。現在他們有兩個問題。「

+2

+1來表示一個好的答案,-1表示使用過的(ab)使用的JZ引用。我對聽到這句話感到厭倦。 – 2009-10-04 00:45:42

0
/http:\/\/www.mysite.com\/files\/get\/([^/]+)\/ 

這個怎麼樣?在/之前應該捕獲任何不是/,1次或更多次的內容。

0

strstr()函數沒有爲其任何參數使用正則表達式這是正則表達式替換的錯誤函數

你在想preg_replace()嗎?

但是像basename()這樣的函數會更合適。

+0

林不尋求與任何東西來取代它,我需要使用$代碼 – Imran 2009-10-03 22:55:42

+0

確定以該網址,但我的觀點是,的strstr沒有按不理解正則表達式,preg_replace(或preg_match)* do *,但簡單地提取文件名或文件夾名稱是工作另一個功能。也許我應該建議使用dirname() – pavium 2009-10-03 23:40:47

0

正則表達式的貪婪將確保能正常工作^.*/

2

這似乎過於簡單使用正則表達式。使用與strrpos類似的內容查找最後一次出現的「/」字符,然後使用substr修剪字符串。

0

試試這個

$ok=preg_match('#mysite\.com/files/get/([^/]*)#i',$url,$m); 
if($ok) $code=$m[1]; 

然後給一個良好的閱讀到這些網頁

  • 使用「#」作爲分隔符,以避免被陷入逃逸太多「/」
  • 「我」的標誌製作比賽不敏感 (允許MySite.com域名更寬鬆的拼寫)
  • 捕獲結果
+0

這隻能得到匹配的鏈接,我希望他們是如何。 我需要一個腳本,實際上改變這些鏈接內的字符串我想 – Imran 2009-10-04 17:09:05

+0

因此像 $ url = preg_replace('#http:// www \ .mysite \ .com/files/get /([^ /] *)[^「] *#i','smtg \ 1 smtg',$ url); – ZJR 2009-10-04 20:21:21

相關問題