31

私は完全には理解していない正規表現に出くわしました-誰かがそれを解読するのを手伝ってくれるでしょうか:

^home(?:\/|\/index\.asp)?(?:\?.+)?$

これはURLマッチングで使用され、上記の例は次のURLと一致します。

home
home/
home/?a
home/?a=1
home/index.asp
home/index.asp?a
home/index.asp?a=1

括弧内の疑問符(?:は何もしないように思えます。誰かが私を啓発できますか?

使用されている正規表現のバージョンは、Classic ASPで提供されているものであり、それが役立つ場合はサーバー上で実行されています。

4

4 に答える 4

39

(?:)非キャプチャ グループを作成します。後方参照を作成せずに、物事をグループ化します。

後方参照は、式または可能な置換で参照できる部分です (通常、フレーバーに応じて\1orなどで)。$1プログラミング言語で正規表現を使用する場合、通常は後で一致からそれらを抽出することもできます。を使用する唯一の理由(?:)は、新しい後方参照を作成しないようにすることです。これにより、グループ番号のインクリメントが回避され、(通常は無視できる量の) メモリが節約されます。

于 2013-01-03T11:37:05.890 に答える
13

これは非キャプチャ グループであり、基本的に を使用する場合と同じです(...)が、コンテンツは保持されません (後方参照としては使用できません)。

(abc)(?:123)(def)あなたがこのようなことをabc$1defいる$2なら123:

于 2013-01-03T11:38:44.057 に答える
1

すべての括弧がメモリ内に変数を作成するのは本当に簡単なので、後で括弧の値を使用して、メモリに保存しないようにすることができます。この (?:) のように括弧で囲み、必要に応じて残りを埋めます。それだけで、他には何もありません

于 2018-11-30T07:34:25.117 に答える