2

正規表現の一致を行うために Java を使用しています。rubular を使用して一致を検証し、ideone を使用してコードをテストしています。

この SO ソリューションから正規表現を取得しました。これは、ルビュラーで希望するとおりにグループに一致しますが、Java での実装は一致しません。「値」を出力すると、matcher.group(1) ではなく、commaSeparatedString の値が出力されます

String commaSeparatedString = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso";
//match everything after first comma
String myRegex = ",(.*)";
Pattern pattern = Pattern.compile(myRegex);
Matcher matcher = pattern.matcher(commaSeparatedString);
 String value = "";
if (matcher.matches())
    value = matcher.group(1);
else
    value = commaSeparatedString;                     
System.out.println(value);

(編集:commaSeparatedStringに常に2つのコンマが含まれるとは限らないことを省略しました。むしろ、常に0以上のコンマが含まれます)

4

6 に答える 6

4

正規表現で解決する必要がない場合は、これを試すことができます:

int size = commaSeparatedString.length();
value = commaSeparatedString.substring(commaSeparatedString.indexOf(",")+1,size);

つまり、上記のコードは、最初のコンマのインデックスから始まる部分文字列を返します。

編集:

申し訳ありませんが、単純なバージョンは省略しました。コメンテーターの 1 人のおかげで、次の 1 行も使用できます。

value = commaSeparatedString.substring( commaSeparatedString.indexOf(",") );
于 2013-01-10T17:56:45.380 に答える
3

正規表現の定義が間違っています。そのはず:

String myRegex = "[^,]*,(.*)";
于 2013-01-10T17:59:53.253 に答える
1

あなたは、Javaの誤った正規表現メソッドの命名のもう1つの犠牲者です。

.matches()正規表現を最初と最後に自動的に固定します(これは、「正規表現マッチング」の定義そのものとは完全に矛盾しています)。あなたが探している方法はです.find()

ただし、このような単純な問題の場合は、@DelShekastehのソリューションを使用することをお勧めします。

于 2013-01-10T17:59:14.597 に答える
0

私はreplaceFirstを使用します

String commaSeparatedString = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso";
System.out.println(commaSeparatedString.replaceFirst(".*?,", ""));

版画

v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso

または、短いが鈍いを使用できます

System.out.println(commaSeparatedString.split(",", 2)[1]);
于 2013-01-10T18:11:53.610 に答える
0

私はこれを次のようにします

    String commaSeparatedString = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso";

    System.out.println(commaSeparatedString.substring(commaSeparatedString.indexOf(",")+1));
于 2013-01-10T18:02:15.003 に答える
0

これは、分割が制限された別のアプローチです

String[] spl = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso".split(",", 2);
if (spl.length == 2)
    System.out.println(spl[1]);

Byt IMHO Delの答えはあなたのケースに最適です。

于 2013-01-10T18:08:43.963 に答える