亚马逊短网址正则表达式...为什么我不能让这个工作

jka*_*zer 4 php regex amazon short-url

这里有一个我得到的正则表达式:一个我无法链接的博客,因为我是新的...只是谷歌亚马逊短网址并点击诺亚科德的博客文章

正如你从这个页面看到的...它应该从任何亚马逊网址中提取唯一的产品ID,这样你就可以缩短它...或者用它来从亚马逊apis中提取信息.

这是我试图使用它来运行的示例代码:

<?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);
?>
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

test

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

非常感谢!这是我第一次在这个网站上发帖,我已经找到了无数的答案

在第二方面...收回我对这个痛苦的第一次提交过程的一些感谢...我不得不修改这个问题因为它认为我的正则表达式模式是网址

Pas*_*TIN 12

你的正则表达式可能需要分隔符:一个将出现在它的开头和结尾的字符.
这篇关于PHP手册的评论很感兴趣,关于这个:-)

" /"被经常使用; 但有些人更喜欢' #' - 第二个对URL很好

所以:

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

并且,使用完整代码,稍微修改以捕获结果:

$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);
Run Code Online (Sandbox Code Playgroud)

你得到的输出var_dump是:

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)
Run Code Online (Sandbox Code Playgroud)

$matches[1]0764584367.

  • 感谢一个令人敬畏,简单而优雅的解释.甚至更多的是超越.这是一个很棒的社区,你就是一个很好的例子. (3认同)