のようなものをキャッチしたいのですsomedomain.com/folder/path
が、のようなものはキャッチしたくありませんdomain.sub.other.com
。私がこれまでに持っている正規表現はほぼ完成しています。マルチドメインの URL をふるいにかけないだけです。
^(.*)://(?!(.{2,3})\.(.*)(.{2,3})(.*)
複数の期間をふるい分ける方法はありますか?
の代わりに.{2,3}
、次のようなものが必要です。[^.]{2,3}
- これにより、その特定の一致からピリオドが除外されます (正規表現のこのコンテキストでは特別な意味がないため、エスケープする必要はありません)。全体として、次のようなものになります。
://[^.]+\.[^.]{2,3}(/.*)?
明らかに *.info のようなものを見逃していることを除いて....
さまざまなテスト シナリオで機能するソリューションを見つけました。
^(.*)://([^.]+)\.([^(\?|/|\r|\n|\.)]+)((/|\?|$)+)(.*)$
ここで、最後のグループから 2 番目のグループは、潜在的なスラッシュ、疑問符、または文字列の末尾に対して一致し、その前のグループと連携して、「.」を含む一致を許可しません。
したがって、最終的な効果として、「domain.com」などの 2 つの部分からなるドメインを持つ URL のみが一致し、文字列の長さに制限はありません。