0

解析しているファイルがあり、常にメールアドレスが含まれています。ファイルは現在、の前に先頭のスペースが表示されて配置されており@、ドメインをキャプチャする必要があります。

foo @bar.com more data here
foo @foo.com more data here

引き出したいのですが@bar.com@foo.com正規表現を使い始めたばかりです。「 @単語境界の先頭で、次の単語境界までの後続のすべての文字を含む」というパターンをプルしようとしています。

私は次のさまざまな反復を試しましたが、@文字通りのグループ化、正方形のバケツ...しかし何も機能していないようです。

編集-実際のコード:

import java.util.regex.*;
import java.io.*;
import java.nio.file.*;
import java.lang.*;
//
public class eadd
{
    public static void main(String args[])
    {
        String inputLine = "foo foofoo foo foo @bar.com foofoofoo foo foo foo";
        String eDomain = "";
       // parse eadd
        Pattern p2 = Pattern.compile("(\\b@.*\\b)");
        Matcher m2 = p2.matcher(inputLine);
            if(m2.matches()) {
                eDomain = m2.group(1);
                } else {
                eDomain = "n/a";
            }
        System.out.println(p2+" "+m2+" "+eDomain);
    }
}

そして、私がそれを実行したときの結果。

(\b@.*\b) java.util.regex.Matcher[pattern=(\b@.*\b) region=0,49 lastmatch=] n/a

私の問題はすべて、パターンではなくリテラルとして検索された後の問題に関連しています@(たとえば、ではなく検索.*any and all characters。制御文字であるという言及が見つからない@ので、逃げる必要はないと思います。

OracleのJavaチュートリアルやドキュメント、SO、または私がチェックアウトしたオンラインリソースには、同様の例はありません。私は人々がこれをどのように扱ったかの他のサンプルを見つけることができませんでした。私が言ったように、私は正規表現にかなり慣れていませんが、これは私にとってはうまくいくはずだと私には思えます。私は何が欠けていますか?

4

3 に答える 3

2
Pattern p = Pattern.compile("(@(?:[a-z][A-Z0-9_]+)\\.(?:[a-z][A-Z]+))");

これはあなたのために働くはずです。

この正規表現は@の検索を開始します。その後、「。」が続き、その後に別の単語が続く単語を検索します。構文に精通しているために、これを見ることができます。

于 2012-08-08T15:14:02.050 に答える
2

@Javaは単語文字として扱わないため、アドレスの先頭に単語の境界はありません。単語の境界を単純な空白の一致に置き換えることができます。

"\s(@.+?)\b"

(または"\\s(@.+?)\\b"これはJavaなので)トリックを行う必要があります。空白の後に続く単語を探し@、次の単語の境界まで一致します。

編集:おっと、、と.同じよう@に、単語の文字ではありません(ええと)。使用する

"\\s(@.+?)(?:\\s|$)"

次の空白またはEOFまで一致します。(?:\\s|$)は、任意の空白または入力の終わりに一致する非キャプチャグループです。

于 2012-08-08T15:23:14.997 に答える
1

これで試してください:Pattern p = Pattern.compile("(?<=\\s)(@(?:bar|foo)\\.com\\b)");
または汎用パターン: "(?<=\\s)(@\\w+(?:\\.\\w+)+\\b)"

説明::
(?<=\\s)前に一致する先頭のスペースを探します@
\\w:一致するアルファベット、数字、アンダースコア:
\\b単語の境界
@\\w+(?:\\.\\w+)+:一致@bar.comする@bar.com.au、、、@bar.com.xyz@bar.foo.xx.yy.zz

于 2012-08-08T15:21:32.767 に答える