String input = "2012 AL REG TEXT 300535(NS)";
String regex = "^((\\d{4})\\s+)?((\\S+)\\s+(.+?)\\s+)\\s+((\\S+)(\\s+\\(.*?\\)))$";
2012 をグループに、「AL REG TEXT」を別のグループに、「300535(NS)」を別のグループにキャプチャしたいと考えています。
エラーは、予想される括弧の前に余分な\\s+
権利があり、@cmonkey が指摘しているよう\\s+
に、中間に余分があることです。これらを削除すると動作します。また、上記のグループのみを取得するには、?:
キャプチャしたくないグループに追加します。
String input = "2012 AL REG TEXT 300535(NS)";
String regex = "^(?:(\\d{4})\\s+)?((?:\\S+)\\s+(?:.+?))\\s+((?:\\S+)(?:\\(.*?\\)))$";
Matcher m = Pattern.compile(regex).matcher(input);
if (m.matches()) {
for (int i = 1; i <= m.groupCount(); i++) {
System.out.format("Group %d: '%s'%n", i, m.group(i));
}
}
版画
Group 1: '2012'
Group 2: 'AL REG TEXT'
Group 3: '300535(NS)'
正規表現の途中に、次の部分があります。
\\s+)\\s+
必要な 2 つの連続したスペースを探しています。これは存在しないため、正規表現は失敗します。
これを試して:^(\\d{4})?\\s+(\\D+)\\s+(\\d.*)$
コードは次のとおりです。
String input = "2012 AL REG TEXT 300535(NS)";
String regex = "^(\\d{4})?\\s+(\\D+)\\s+(\\d.*)$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
if(m.matches()) {
System.out.println("Group count: "+m.groupCount());
for(int i=0; i<=m.groupCount(); i++) {
System.out.println("Group "+i+": "+m.group(i));
}
}
else System.out.println("No match");