这是我得到的一个正则表达式:一个我无法链接的博客,因为我是新的...只是谷歌亚马逊短网址并点击诺亚科德的博客文章
从这个页面可以看到......它应该从任何亚马逊网址中提取唯一的产品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);
?>
这是我的输出:
test
Warning: preg_match() [function.preg-match]: Unknown modifier '(' in /Users/apple/Sites/amazon/asin_extract.php on line 14
非常感谢!这是我第一次在这个网站上发帖,我已经找到了无数的答案
在第二方面...收回我对这个痛苦的第一次提交过程的一些感谢...我不得不修改这个问题,因为它认为我的正则表达式模式是网址
答案 0 :(得分:12)
你的正则表达式可能需要分隔符:一个将出现在它的开头和结尾的字符。 关于PHP手册的This comment感兴趣,关于此: - )
经常使用'/
';但有些人更喜欢“#
” - 第二个人更喜欢网址
所以:
$reg = '#(?:http://(?:www\.){0,1}amazon\.com(?:/.*){0,1}(?:/dp/|/gp/product/))(.*?)(?:/.*|$)#';
并且,使用完整代码,稍微修改以捕获结果:
$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);
您从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)
而$matches[1]
是0764584367
。
答案 1 :(得分:0)
看起来问题是它试图使用括号作为开始/结束正则表达式分隔符。以下是手册页中的示例:
$pattern = '/^def/';
如果使用斜杠作为开始/结束表达式分隔符,那么编写正则表达式会很粗糙。我建议使用井号('#')表示正则表达式,因为你必须减少字符数。
这是我最终的结果:
<?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);
?>