2012-01-16 13 views
-1

私はもう一度私の無知を示​​すために戻ってきました。PHP preg_replace - ####/

特定の場所のURLにある番号を取得するための支援が必要です。私はただ一つの場所からの番号をつかんにそれを制限する必要があるので、URLの残りの部分はまた、例えば、数字が含まれる場合があります。

http://www.example.com/99-Kittens-1382/animals

私はすべての数字をつかむためにereg_replaceを使用したが、その後に実現されていた


1)ereg_replaceは非推奨です
2)URLの中には、別の場所に数字があるものがあります。

この場合、私は欲しい1382の代わりに991382で終わった。

URL構造は常に私たちが持っているはずです - #### /私はそれに基づいて一致させることができるはずです。 (ダッシュ、4つの数字、スラッシュ)

私はいつも正規表現マッチングでひどいです。誰か助けてくれますか?

$urlParts = parse_url($str); 
$pathParts = explode('/', $urlParts['path']); 
$firstParts = explode('-', $pathParts[1]); 
$numberYouWant = array_pop($firstParts); 

See it working

+1

廃止予定のものについては、[正規表現の区切り文字に変換する](http://stackoverflow.com/questions/6270004/converting-ereg-expressions-to-preg)を参照してください。問題と[オープンソースregexbuddy](http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world)または[オンライン正規表現のテスト](http: /stackoverflow.com/questions/32282/regex-testing-tools)を参考にしてください。 – mario

答えて

2

この

は、おそらくより良い正規表現の複雑化せずに行われています

(と)グループはマッチし、[0-9]はマッチする文字の範囲、{4}はマッチさせたいグループの正確な量です。一致するのは$ matches [1]

+0

が完璧です。ありがとうございました。私は5分後にあなたの答えをチェックします。 –

+0

これを試しましたか?私の経験では、explode()はかなり高価で、正規表現よりも多分です。 parse_urlもかなり集中しそうです。 –

+0

私は必要なページにそれを実装しました(ヘッダー内に)、ページは1秒未満で読み込まれます。 –

1
preg_match('#-(\d{4})/#', $url, $matches); 
echo $matches[1]; 
+0

URLはhttp:// www.example.com/I-Would-Like-2199-Kittens-1382/animalsです。 - あなたは '2199'を得るでしょう。 – DaveRandom

+0

まだ動作します。あなたは '/'要求のため2199にマッチしません。この正規表現が行う唯一の仮定は、1)必要な数字は4桁、2)は '-'と'/'で囲まれています.3)最初のマッチが重要です。おそらく、私たちは 'http:// www.example.com/something/kitten-1234/animals'を持っている可能性がありますが、この場合、一致が正しいかどうかは私はOPから十分に分かりません。入力の全範囲と必要な部分(たとえば、「最初のURLパス部分のダッシュの後の最終桁」)が必要です。 –

+0

公正な点は '/'を忘れています。これがOPの要件(私が疑う)で駄目になる唯一の実際の場所は、桁数が常に4ではないかもしれないということです。これは '{1、n}'節で簡単に回避できますが、 'n'は文字の最大数です。 – DaveRandom

1
$a="http://www.example.com/99-Kittens-1382/animals"; 
echo preg_match("/.*?\\/(\\d+)-.*?-(\\d+)\\//",$a,$m)."\n"; 
print_r($m); 

1 
Array 
(
    [0] => http://www.example.com/99-Kittens-1382/ 
    [1] => 99 
    [2] => 1382 
) 
0
$return = preg_match('/-([0-9]{4})/', 'http://www.example.com/99-Kittens-1382/animals', $matches) 
を与える: