これはあなたが(おそらく)必要とするものです:
[a-z]+://([^/ ]+)(?:/[^/ ]*/?)?
仕組みは次のとおりです。
[a-z]+
一部はプロトコル名用です(これは「1つ以上の文字」を意味します-http / https / file / ftp / gopher / foo / whateverプロトコルに一致しますが、「http」のみに一致させたい場合は明示的に記述できます)
://
文字通りそれが言うことです;)
[^/ ]+
1つ以上の非スラッシュおよび非スペース文字です。「a」、fqdn、IPアドレスのいずれかです。なんでもいい
(?:/[^/ ]*/?)?
-これはもっと複雑です。最後に、括弧内のこの?
すべてがそこにある場合とない場合があることを意味します(これはオプションです)。?:
括弧内は、このサブパターンを再利用しないことを意味します(番号が割り当てられておらず、後でその番号で再利用することはできません)。[^/ ]*
は0個以上の非スラッシュ非スペース文字を意味し、末尾のスラッシュの後の疑問符は、スラッシュがオプションであることを示しています。
全体として、これにより次のようなものに一致することが保証されます。
http://foo/bar/baz/something -> http://foo/bar/
http://hello.world.example.com/ -> http://hello.world.example.com/
http://foo.net -> http://foo.net
ftp://ftp.mozilla.org/pub -> ftp://ftp.mozilla.org/pub
注1:式を読みやすくするために、スラッシュにエスケープを意図的に使用しなかったため、他の文字をとして使用するか、 -delimiter
のすべての外観をエスケープしてください。代わりに使用してください。/
\/
注#2:i
式で大文字と小文字を区別しない(a-z
大文字と一致しない)場合は修飾子を追加g
し、1つの大きなテキストブロックで複数の一致を行う場合は修飾子を追加します。
一致では、サブパターン0が完全に一致し、サブパターン1-ホスト名のみになります