Como extrair dados de URLs usando preg_match ()?

Eu preciso extrair números ASIN (SKU alfanumérico de 10 caracteres) dos URLs da Amazon. Os URLs estão sempre nesses formatos:

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 

Geralmente, há mais diretórios, bem como variables, após o número ASIN no URL. Aqui está um URL completo como exemplo:

 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 

Eu acho que isso pode ser possível usando o preg_match() , mas sou muito novo para regex e não tenho a menor idéia de formular a expressão.

Isso é possível fazer com preg_match() ? Caso contrário, qual seria a melhor abordagem para resolver esse problema?

ATUALIZAR:

Eu estive lendo no regex e consegui modificar a resposta para trabalhar quando o ASIN não está no final da string do URL (o que raramente é):

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

Eu também fiz isso para que haja uma barra diagonal antes da partida.

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

Em resumo: [A-Za-z0-9] leva qualquer caractere alfanumérico, ucase e lcase ambos permitidos, {10} exige exatamente 10 vezes e $ exige que ele esteja no final da string. Os parênteses ( e ) definem a (s) parte (s) que deseja retornar na 3 ª $matches variável de saída. Finalmente, tudo está rodeado por 2 # ‘s como delimitadores regex.

Agora, leia todos os artigos na barra lateral esquerda desta página para que você possa fazê-lo na próxima vez 🙂

Além da resposta de Niels:

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

Caso o [text] seja um alfanumérico com 10 caracteres.

    Intereting Posts