2011-02-07 11 views
0

preg_matchを使用して、次のURLから12345を取得しようとしています。PHP preg_matchとテキストの最初の出現 -

$url = "http://www.somesite.com/directory/12345-this-is-the-rest-of-the-url.html"; 

$beg = "http://www.somesite.com/directory/"; 
$close = "\-"; 
preg_match("($beg(.*)$close)", $url, $matches); 

私は複数の組み合わせを試しました。 *? \ b

preg_matchでURLから12345を抽出する方法を知っている人はいますか?

答えて

3

2つのこと、まずオフpreg_quoteが必要で、区切り文字も必要です。私は少し異なるクエリ書くと、

$url = "http://www.somesite.com/directory/12345-this-is-the-rest-of-the-url.html"; 

$beg = preg_quote("http://www.somesite.com/directory/", '/'); 
$close = preg_quote("-", '/'); 
preg_match("/($beg(.*?)$close)/", $url, $matches); 

:しかし、あなたの工法を用いてそれが唯一のディレクトリ部分と一致する

preg_match('/directory\/(\d+)-/i', $url, $match); 

を、はるかに読みやすい、そして(あなただけの数字を取り戻すことを保証します何の文字列)

ない
+0

ありがとう、完璧に動作します! – Mark

1

このするpreg_matchを使用しませんが、同じことを達成するであろうし、高速に実行します:

$url = "http://www.somesite.com/directory/12345-this-is-the-rest-of-the-url.html"; 

$url_segments = explode("/", $url); 
$last_segment = array_pop($url_segments); 

list($id) = explode("-", $last_segment); 

echo $id; // Prints 12345 
+0

実際にはそれ以上速く動かず、ircmaxellスニペットが提供されます(少なくとも測定可能な量ではありません)。テスト中に、時々あなたのスニペットや時にはircmaxellのスニペットが速かった。私のスニペットは、ほぼ2倍のスピードでした。 – yankee

+0

@yankee、結果をテストして共有しようとしてくれてありがとう! –

0

あまりにも遅く、私は^^です。あなたが探している番号は、数値IDは、それが典型的であるであることを、

$num = (int)substr($url, strlen($beg)); 

は(私は推測あなたのコードを見て:あなたがするpreg_matchで立ち往生されていない場合 さて、ここでは、迅速かつ読みやすい代替手段ですそのように見えるURLは "12abc"または他のものではありません)

+0

送信されたURLが 'directory/123e45-'の場合はどうなりますか?または 'ディレクトリ/ e123'。または 'ディレクトリ/ 0123'? – ircmaxell

+0

@ircmaxell:はい、この場合、スニペットは質問に従わないでしょう。私はこれを反映するために私の答えを編集しました。 – yankee

関連する問題