我收到了以下网址
http://www.amazon.com/LEGO-Ultimate-Building-Set-Pieces/dp/B000NO9GT4/ref=sr_1_1?m=ATVPDKIKX0DER&s=toys-and-games&ie=UTF8&qid=1350518571&sr=1-1&keywords=lego
我要提取
B000NO9GT4
这是asin ...到现在为止,我可以在字符串之间进行搜索,但不是这样我需要的。我看到了分裂的功能,我看到了爆炸。但是找不到出路......而且,网址的长度会有所不同,所以我不能对长度进行硬编码。在我看来,唯一有意义的就是分割字符串以便
http://www.amazon.com/LEGO-Ultimate-Building-Set-Pieces/dp/
成为第一部分
和
B000NO9GT4/ref=sr_1_1?m=ATVPDKIKX0DER&s=toys-and-games&ie=UTF8&qid=1350518571&sr=1-1&keywords=lego
成为第二部分,从第二部分开始,我应该提取B000NO9GT4
以同样的方式,我希望从第一部分
获得产品名称LEGO-Ultimate-Building-Set-Pieces
我在正则表达式上非常糟糕,无法找到出路......
有人可以指导我如何在php中完成它吗?
感谢
答案 0 :(得分:2)
你可以尝试
$str = "http://www.amazon.com/LEGO-Ultimate-Building-Set-Pieces/dp/B000NO9GT4/ref=sr_1_1?m=ATVPDKIKX0DER&s=toys-and-games&ie=UTF8&qid=1350518571&sr=1-1&keywords=lego" ;
list(,$desc,,$num,) = explode("/",parse_url($str,PHP_URL_PATH));
var_dump($desc,$num);
输出
string 'LEGO-Ultimate-Building-Set-Pieces' (length=33)
string 'B000NO9GT4' (length=10)
答案 1 :(得分:2)
这会抓取您要捕获的两条信息:
$url = 'http://www.amazon.com/LEGO-Ultimate-Building-Set-Pieces/dp/B000NO9GT4/ref=sr_1_1?m=ATVPDKIKX0DER&s=toys-and-games&ie=UTF8&qid=1350518571&sr=1-1&keywords=lego';
$path = parse_url($url, PHP_URL_PATH);
if (preg_match('#^/([^/]+)/dp/([^/]+)/#i', $path, $matches)) {
echo "Description = {$matches[1]}<br />"
."ASIN = {$matches[2]}<br />";
}
输出:
描述= LEGO-Ultimate-Building-Set-Pieces
ASIN = B000NO9GT4
简短说明:
( )
中的所有表达式都将保存为捕获组。这是我们获取$matches[1]
和$matches[2]
。([^/]+)
表示匹配除/
之外的所有字符,因此实际上它会捕获两个/
分隔符之间的URL中的所有内容。我使用这种模式两次。 [ ]
实际上定义了/
的字符类,^
在这种情况下否定了它,因此它不匹配/
而是匹配所有内容/
。另一个例子是[a-f0-9]
,它会匹配字符a,b,c,d,e,f
和数字0,1,2,3,4,5,6,7,8,9
。 [^a-f0-9]
将是相反的。#
用作表达式^
表示从字符串的开头匹配。有关正则表达式如何工作的详细信息,请参阅www.regular-expressions.info和PCRE Pattern Syntax。