amazon kısa url regex ...

2 Cevap php

burada ben aldığım bir regex çıkmaktadır: i yeni Çünkü ben bağlantı veremez bir blog ... sadece amazon kısa url google ve nuh Coad tarafından blog yazısı üzerine tıklayın

Bu sayfada gördüğünüz gibi ... o bunu kısaltmak ... ya amazon apis den bilgi çekmek için kullanabilirsiniz böylece herhangi bir amazon url benzersiz ürün kimliği ayıklamak gerekiyordu.

burada ben işe almak için kullanmaya çalışıyorum örnek kod:

<?php
$example_url = 'http://www.amazon.com/dp/1430219483/?tag=codinghorror-20';    

$reg = '(?:http://(?:www\.){0,1}amazon\.com(?:/.*){0,1}(?:/dp/|/gp/product/))(.*?)(?:/.*|$)';

echo 'test<br/>';

echo preg_match($reg,$example_url);
?>

ve burada benim çıktı:

test

Warning: preg_match() [function.preg-match]: Unknown modifier '(' in /Users/apple/Sites/amazon/asin_extract.php on line 14

çok teşekkürler! Bu i zaten sayısız cevaplar bulduk bu sitede benim ilk kez bir gönderme olduğunu

İkinci yandan ... Bu acı ilk kez gönderme işlemi için benim teşekkür kısmını geri almak ... i benim regex desenleri adresler olduğunu düşünüyor çünkü bu soruyu kesmek zorunda kaldım

2 Cevap

Your regex probably needs delimiters : a character that will be present at the beginning and the end of it.
This comment on the PHP manual is interested, about this :-)

'/' sık sık kullanılır; ama bazı insanlar '#' tercih - URL'ler için güzel olmak, ikinci bir

Yani:

$reg = '#(?:http://(?:www\.){0,1}amazon\.com(?:/.*){0,1}(?:/dp/|/gp/product/))(.*?)(?:/.*|$)#';

Ve, tam kodu, biraz sonuçları yakalamak için değiştirilmiştir

$example_url = 'http://www.amazon.com/Professional-Visual-Studio-System-Programmer/dp/0764584367/ref=sr_1_1/104-4732806-7470339?ie=UTF8&s=books&qid=1179873697&sr=8-1';
$reg = '#(?:http://(?:www\.){0,1}amazon\.com(?:/.*){0,1}(?:/dp/|/gp/product/))(.*?)(?:/.*|$)#';
echo 'test<br/>';

$matches = array();
echo preg_match($reg,$example_url, $matches);

var_dump($matches);

Eğer var_dump elde çıkışı:

array
  0 => string 'http://www.amazon.com/Professional-Visual-Studio-System-Programmer/dp/0764584367/ref=sr_1_1/104-4732806-7470339?ie=UTF8&s=books&qid=1179873697&sr=8-1' (length=149)
  1 => string '0764584367' (length=10)

Ve $matches[1] olan 0764584367.

Sorun sizin başlangıcı / sonu düzenli ifade sınırlayıcı olarak parantez kullanmaya çalışıyor olması gibi görünüyor. İşte adam sayfasından bir örnek:

$pattern = '/^def/';

Eğer başlangıcı / sonu ifadesi ayraç olarak çizgi kullanmak eğer düzenli ifade yazmak zor olacak. Eğer daha az karakter kaçmak gerekecek gibi düzenli ifade için pound işareti ('#') kullanmanızı öneririz.

Burada ben ile sona ne:

<?php

$example_url = 'http://www.amazon.com/Server-Side-Programming-Techniques-Performance-Scalability/dp/0201704293';

$reg = "#(?:http://(?:www\.){0,1}amazon\.com(?:/.*){0,1}(?:/dp/|/gp/product/))(.*?)(?:/.*|$)#";

echo 'test<br/>';

echo preg_match($reg, $example_url);

?>