2014-01-08 55 views
1

我需要從亞馬遜網址中提取ASIN號碼(10個字符的字母數字SKU)。該網址總是在這些格式:如何使用preg_match()從URL中提取數據?

http://www.amazon.com/gp/product/ASIN 
http://www.amazon.com/gp/product/[text]/ASIN 
http://www.amazon.com/o/ASIN 
http://www.amazon.com/dp/ASIN 
http://www.amazon.com/[text]/dp/ASIN 
http://www.amazon.com/[text]/dp/[text]/ASIN 

通常有更多的目錄,以及變量,在URL中的ASIN號碼後。這裏是一個完整的URL爲例:

http://www.amazon.com/Google-Nexus-Tablet-7-Inch-Black/dp/B00DVFLJDS/ref=sr_1_1?ie=UTF8&qid=1387937682&sr=8-1&keywords=nexus+7 

我想,這也許可以使用preg_match()做的,但我很對正則表達式,並沒有一個線索制定的表達。

這可能與preg_match()有關嗎?如果不是,解決這個問題的最好方法是什麼?

UPDATE:

我已經在正則表達式閱讀起來,並能修改答案時的工作ASIN是不是在URL字符串(而事實上並非如此)的末尾:

#\/([A-Za-z0-9]{10})# 

我也做到了,所以在比賽前必須有一個正斜槓。

+1

可以用'preg_match()'做。現在拿一些文章,只是學習如何做到這一點。 – zerkms

+1

是的,這是可能的,應該不會那麼困難,因爲您只搜索一個不同的組。但是你仍然必須自己研究這一點 - 當你爲一次具體的嘗試而鬥爭時,隨時再問一次 – kero

+1

正如@zerkms指出的那樣,這是可能的。預計你至少會在尋求幫助之前進行嘗試。 –

回答

2
preg_match('#([A-Za-z0-9]{10})$#', $url, $matches); 

簡而言之:[A-Za-z0-9]採取任何字母數字字符,UCASE和LCASE既允許的,{10}需要它正好10倍,和$要求它在所述字符串的末尾。圓括號()定義了您想要在第3個$matches輸出變量中返回的部分。最後它全部被2 #包圍爲正則表達式分隔符。

現在去read every article in the left sidebar of this page這樣你就可以自己做下一次:)

+2

榮譽解釋你的解決方案,而不是隻是說'做這個'。 – Rottingham

1

除了尼爾斯的答案:

​​

如果[text]是10個字符的字母數字。