-3

私は正規表現が苦手なので、ここで簡単な質問をします。

私はこのようにリンクのリストを持っています:

http://domain.com/andrei/sometext
http://domain2.com/someothertext/sometextyouknow/whoknows
http://domain341.com/text/thisisit/haha

これを取り出すには、2 つの正規表現が必要です。

http://domain.com/andrei/
http://domain2.com/someothertext/
http://domain341.com/text/

これは私が必要とする最初の正規表現であり、ドメインを取り出すためだけに別の正規表現が必要ですが、誰かが私が書いたものだけを取り出す正規表現を教えてくれれば、それを理解できると思います.

4

3 に答える 3

5

これはあなたが(おそらく)必要とするものです:

[a-z]+://([^/ ]+)(?:/[^/ ]*/?)?

仕組みは次のとおりです。

  1. [a-z]+一部はプロトコル名用です(これは「1つ以上の文字」を意味します-http / https / file / ftp / gopher / foo / whateverプロトコルに一致しますが、「http」のみに一致させたい場合は明示的に記述できます)
  2. ://文字通りそれが言うことです;)
  3. [^/ ]+1つ以上の非スラッシュおよび非スペース文字です。「a」、fqdn、IPアドレスのいずれかです。なんでもいい
  4. (?:/[^/ ]*/?)?-これはもっと複雑です。最後に、括弧内のこの?すべてがそこにある場合とない場合があることを意味します(これはオプションです)。?:括弧内は、このサブパターンを再利用しないことを意味します(番号が割り当てられておらず、後でその番号で再利用することはできません)。[^/ ]*は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-ホスト名のみになります

于 2012-07-04T20:18:29.647 に答える
1

これはおそらくあなたが探しているものです:

([a-zA-Z]+://([\w.]*)/(?:.*?/)?)

グループ 1 にはすべての一致があり、グループ 2 にはドメインだけがあります。2 つの正規表現は必要ありません。:)

于 2012-07-04T20:27:20.907 に答える
0

https?:\/\/[^\/]+\/[^\/]+/(.*)最初のタスクには正規表現を使用します$1-emtpystringに置き換えます''

2番目のタスクには正規表現を使用https?:\/\/([^\/]+)します-一致$1はドメイン名です。

于 2012-07-04T20:05:52.937 に答える