4

次の4つのケースに一致する単一の正規表現を探しています(URLを書き直すことができるようにIDを取得します)

http://localhost/gallery/test-name/123456
http://localhost/gallery/test-name/123456/
http://localhost/gallery/test-name/123456/video-name/159
http://localhost/gallery/test-name/123456/video-name/159/

現在の正規表現は以下のとおりですが、すべての場合でIDを正しく取得しているわけではありません。私が間違っていることを知っている専門家はいますか?

^(.*)/gallery/(.*)/([0-9]{1,15})(/)?((.*)/([0-9]{1,15})(/)?)?
4

3 に答える 3

3

.*(2回目の使用)は貪欲です。したがって、最後のIDまですべてを消費します。そのため、最初のIDが2つあると、最初のIDが失われます。代わりに貪欲にしないでください:

^(.*)/gallery/(.*?)/([0-9]{1,15})(/)?((.*?)/([0-9]{1,15})(/)?)?

これにさらにパラメータを追加したい場合に備え?て、最後にaも追加しました。.*ただし、文字列を単純に分割する方が、/とにかく簡単な場合があります。

于 2012-10-12T18:54:16.537 に答える
1

.*正規表現の2番目をに変更するだけ.*?で、サンプル文字列に期待するキャプチャグループを取得できます。

^(.*)/gallery/(.*?)/([0-9]{1,15})(/)?((.*)/([0-9]{1,15})(/)?)?

例:http ://www.rubular.com/r/CdBgdA1PlY

于 2012-10-12T18:54:56.023 に答える
1

私はそれがあなたが望んでいたものではないことを知っていますが、あなたは次のようなことを考えましたか?

string l_url = "http://localhost/gallery/test-name/123456/video-name/159";
string l_id = l_url.Split( '/' )[5];

言語を指定しなかったため、上記はC#ですが、他の言語に簡単に変換できます。

于 2012-10-12T19:43:00.940 に答える