Я пытаюсь сопоставить очень специфический шаблон для моего универа. К сожалению, я застрял. Шаблон идет следующим образом:
- Слово или число длиной 1 или 2, за которым следует
,
.
- Это повторяется четыре раза, а затем следует
;
вместо ,
.
- Все это повторяется ровно четыре раза, но без
;
в конце.
Примеры будут:
SR,SR,SR,AR;0,11,22,33;SG,1,23,DG;SY,BY,CY,DY
36,AR,CR,DR;SB,10,16,22;SG,13,BG,DG;SY,0,20,BY
Принимая во внимание, что они не должны совпадать (ищите запятые и точки с запятой):
SR,SR;SR,AR;0,11,22,33;SG,1,23,DG;SY,BY,CY,DY
36,AR,CR,DR,SB,10,16,22;SG,13,BG,DG;SY,0,20,BY
Самое близкое, что у меня есть
((([ABCDS][RBGY])|\d{1,2})[,;]){16}
Но это соответствует отрицательным примерам выше.
Это мой текущий обходной путь:
public boolean matching(String arguments) {
String[] strings = arguments.split(";");
if (strings.length != 4) return false;
for (String s : strings) {
String[] strings1 = s.split(",");
if (strings1.length != 4) return false;
for (String s1 : strings1) {
if (!s1.matches(POSITION_PATTERN)) return false;
}
}
return true;
}
Однако это не идеальное решение и очень неэффективное.