1

PHP 関数で 2 つの異なる URL から数値を抽出するために使用できる単一の正規表現を作成しようとしています。これらの URL の形式は次のとおりです。

/t/2121/title/

/top2121.html

私は正規表現が苦手で、すでに次の多くのバリエーションを試しました。

#^/t/(\d+?)/|/top(\d+?)\.html/#i

これは何もしていません.正規表現に関する多くのサイトやチュートリアルを読んだ後でも、私はまだ完全に途方に暮れています. 入力した URL 形式に関係なく、数値を追加できる正規表現を作成できますか?

4

5 に答える 5

1

URLが受け入れられた形式と一致するかどうかもチェックしながら、数字のみを抽出する正規表現:

#^\/t(?:\/(\d+)\/[a-z_-]+\/?|op(\d+)\.html)$#i 編集:2つのグループでキャプチャ

ここで説明されたデモ: http://regex101.com/r/dO5dI4

バリアント #2: 同じグループでのキャプチャ

#^\/t(?|\/(\d+)\/[a-z_-]+\/?$|op(\d+)\.html$)#i

ここで説明されたデモ: http://regex101.com/r/cG9vC3

于 2013-02-06T21:30:19.860 に答える
1

t間に関係なく最初の数字だけが必要な場合は/、次のようなものが機能する可能性があります。#t/?(\d+)#i

編集:

例: http://codepad.viper-7.com/0z3ee0

于 2013-02-06T19:33:47.433 に答える
0

この正規表現を両方のタイプの URL 形式に一致させることができました。

#^/(?:(?:t/)|(?:top))(\d+)(?:(?:\.html)|(?:/))#i

誰かが同じ正規表現を実行するより効率的な方法を持っているなら、私はそれを聞きたいです.

于 2013-02-06T20:55:24.197 に答える
0

これらの URL のいずれかを取得した場合は、この式を使用できます。数字は 2 番目の位置に保存する必要があります。

#^/t(op|/)(\d+)(\.html|/.*)#i
于 2013-02-06T20:57:07.910 に答える
0

URL に気にしない数字が含まれることはありますか? そうでない場合は、数字をキャプチャして残りを無視するだけで、これを単純に保つことができます。

#(\d+)#
于 2013-02-06T21:03:34.403 に答える