1

次の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

抽出したい

B000NO9GT4

それはasinです...今まで、私は文字列間で検索を取得できますが、この方法では必要ありません。私はスプリットファンクチンを見ました、私は爆発を見ました。しかし、抜け道を見つけることができません...また、URLの長さが異なるため、長さ2をハードコーディングすることはできません..私の心の中で意味があるのは、文字列を分割して次のようにすることだけです。

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でそれを行う方法を教えてもらえますか?

ありがとう

4

2 に答える 2

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)
于 2012-10-18T00:30:07.803 に答える
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-
PiecesASIN = B000NO9GT4

簡単な説明:

  • で囲まれた式( )は、キャプチャグループとして保存されます。これが、$matches[1]とのデータを取得する方法$matches[2]です。
  • この式([^/]+)は、を除いてすべての文字に一致することを示しているため、実際には、2つの区切り文字/の間のURL内のすべてをキャプチャします。/このパターンを2回使用します。実際には、[ ]であった文字クラスを定義します。この場合はそれを否定するため、一致する代わりにすべてに一致します。別の例は、文字と数字を一致させると言うことです。 反対になります。/^//[a-f0-9]a,b,c,d,e,f0,1,2,3,4,5,6,7,8,9[^a-f0-9]
  • #式の区切り文字として使用されます
  • ^区切り文字に続くとは、文字列の先頭から一致することを意味します。

正規表現の動作の詳細については、 www.regular-expressions.infoおよびPCREパターン構文を参照してください。

于 2012-10-18T00:33:04.377 に答える