4

ここに私が得た正規表現があります:私が新しいのでリンクできないブログ...ちょうどGoogleのAmazonの短いURLとnoah coadによるブログ投稿をクリックしてください

このページからわかるように...任意のAmazon URLから一意の製品IDを抽出することになっているため、短縮できます...またはそれを使用してAmazon APIから情報を取得します.

これを機能させるために使用しようとしているサンプルコードは次のとおりです。

<?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

本当にありがとう!このサイトに投稿するのはこれが初めてで、すでに数え切れないほどの答えが見つかりました

一方で...この苦痛を伴う初めての提出プロセスに対する私の感謝の一部を取り戻してください...私の正規表現パターンがURLであると考えているため、この質問を削除する必要がありました

4

2 に答える 2

12

あなたの正規表現にはおそらく区切り文字が必要です。つまり、最初と最後に存在する文字です。
これについては、PHPマニュアルのこのコメントに興味があります:-)

' /' がよく使われます。しかし、' ' を好む人もい#ます -- 2 番目は URL に適しています

そう :

$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

于 2009-10-20T19:09:06.403 に答える
0

問題は、正規表現の開始/終了区切りとして括弧を使用しようとしていることにあるようです。man ページのサンプルを次に示します。

$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);

?>
于 2009-10-20T19:11:58.510 に答える