1

CSVファイルから文字列を読み取る次のJavaコードがあります。次に、文字列を分割して確認し、パターンに含まれる「anyaddress」の部分を抽出します: " http://www.anyaddress.anything/ "

//Split the file strings since it is CSV file
    while((Line=in.readLine())!=null) 
       strings = Line.split(",");

    for(int i=0; i<strings.length; i++)
    {
        Pattern regex = Pattern.compile(
        "(?<=http://www.)" + "[^/]*", Pattern.COMMENTS);
        Matcher regexMatcher = regex.matcher(strings[i]); 
        if (regexMatcher.find()) 
        { 
           //Returns the input subsequence matched by the previous match.
           ResultString = regexMatcher.group();                
           out.write(ResultString);
           out.newLine();
        }  //end if

    } //end for loop

    in.close();
    out.close();

ここで、テキストファイルに次の異なる形式の文字列が含まれている可能性があることがわかりました:' http://www.anyaddress.anything/ ' OR'http://anyaddress.anything/ ' OR'https ://www.anyaddress。何でも/ 'または' https://anyaddress.anything/ '

「anyaddress」の部分のみを抽出する必要があります。以前の投稿で検索しましたが、Javaで正規表現を使用して複数のパターンを確認できますか?「|」を追加するだけでよいことがわかりました。しかし、たとえば、次を追加して2番目のパターンを含めるように正規表現を編集した場合:

Pattern regex = Pattern.compile(
        "(?<=http://www.) | (?<=http://)" + "[^/]*", Pattern.COMMENTS);

私のプログラムはアドレスをwww.anyaddress.anythingとして抽出しましたが、必要なのは「anyaddress.anything /」の部分だけであり、それに加えて、プログラムは「www」を持たないアドレスを正しく抽出します。以前は抽出できませんでした。

誰かが私の間違いがどこにあるのか私に明確にすることができますか?プログラムに上記の4つの形式のいずれかでリンクを正しく抽出させるために、複数のパターンを含めるにはどうすればよいですか?

4

1 に答える 1

2

使用頻度が低く、ここでは必要ないため、ルックバックは避けます。また、それが交代とどのように組み合わされるのかわかりません。URLを解析しているので、URLまたはURIクラスを使用し、ドメイン名を抽出してから、先頭の「www」を削除することをお勧めします。それでも正規表現を使用したい場合は、

Pattern.compile("https?//:(?:www[.])?([^/]*)")

それは読む

httpに加えて、オプションの「s」スラッシュスラッシュコロンオプションの「www」。次のスラッシュまでの(ただし除外する)すべてのキャプチャグループ

また、group(1)を使用して結果を読み取ります。これは、一致全体ではなく、最初のキャプチャグループであるためです。

于 2012-06-25T11:05:13.187 に答える