エラーを検索するには、プログラムの出力を解析する必要があります。エラーは次のように示されます。
[(FieldName / Value)=(phrase / What is Up John Carl?)failed rule alphanumeric ] [(FieldName / Value)=(newLabel / Óscar'sIPad)failed ruleillegalchars ]
1行に複数のエラーが発生する可能性があり、エラーごとに太字の単語/文を取得したいと思います。そのために、次のように正規表現を作成しています。
static String s1 = Pattern.quote("[(FieldName/Value) = (");
static String s2 = Pattern.quote(") failed rule");
static String s3 = Pattern.quote("]");
static Pattern p = Pattern.compile(s1 + "(\\w+)/(.+)" + s2 + "(.+)" + s3);
while (matcher.find()) {
String token = matcher.group(1);
sb.append("#");
sb.append(token);
token = matcher.group(2);
sb.append("#");
sb.append(token);
token = matcher.group(3).trim();
sb.append("#");
sb.append(token);
}
しかし、出力は次のとおりです。
#phrase#What is Up John Carl?) failed rule alphanumeric] [(FieldName/Value) = (newLabel/Óscar's IPad#illegalchars
したがって、2つの一致を返すのではなく、1つだけを返します。最初のグループで停止するのではなく、2番目のグループを文字列の残りの部分と照合し"failed rule"
ます。パターンの最初のせいだと思いますが(.+)
、そこには何でも入ることができるので、が必要(.+)
です。それを行う方法はありますか?