2016-12-01 30 views
1

私は文字列からアドレスを解析しようとしていると、選択した文字列のための部分的な成功を収めているを使用してURLを解析.... 正規表現

は現在、私は、入力時に

Pattern regex = Pattern.compile("[/].*[a-zA-Z](?=\/|:|)", Pattern.DOTALL) 

を持っています私は、入力文字列https://www.google.com/search?q=Regular+Expressions&num=1000をしようとすると、文字列https://www.google.com/現在のパターンが私//www.google.com取得は(多少正しいです)しかし、それは私がやろうとしていますどのような私に//www.google.com/search?q=Regular+Expressions&num

を与え、それが終了するようにアドレスを解析しています:/、または空白

前に、私はまた、

Pattern regex = Pattern.compile("[.*/][^/][a-z].*[a-zA-Z](?=\/|:|)", Pattern.DOTALL) 

と思いついたのと、それは私に/google.comを与えhttps://google.com:80で(部分的に)動作します。

私は間違っていますか?

+0

Javaの['URL'](https://docs.oracle.com/javase/7/docs/api/java/net/URL.html)を使用しないのはなぜですか? – shmosel

+0

しかし、私は正規表現を学ぼうとしています! – nelac123

+0

'。*?// [^:/ \ s] *'はどうですか? – shmosel

答えて

2

は、この正規表現^.*?\/\/([^:\/\s]+)を試してみてください、あなたが検索している部分は、EDIT

Pattern pattern = Pattern.compile("^.*?\\/\\/([^:\\/\\s]+)"); 
Matcher matcher = pattern.matcher("your input url"); 
while (matcher.find()) { 
    System.out.println("Domain: " + matcher.group(1)); 
} 

1グループに格納されます。は式の前//を照合することによって、余分なバックスラッシュの問題を修正しました。このパターンは、アドレスの前/任意の数の文字を食べるようになる

Pattern pattern = Pattern.compile("^.*?\\/+([^:\\/\\s]+)"); 

+0

これは完全に動作していますが、/を簡単に部分文字列にすることができます。ありがとうございました! – nelac123

+0

修正済みですが、リンクも更新されています。 –

1

余分/問題を修正する必要があります@NicolasMaltaisによって答えのこの改正は、(私はコードの最初の行を示しています)。したがって、 "file:///my_file.txt"のようなURLも扱うことができます(ファイルパスの開始だけを気にしていた場合)。