У вашего регулярного выражения ^NUMERIC(\\d*\\.\\d+|\\d+\\.\\d*$)
есть небольшие проблемы.Вам нужно экранировать (
и записать их как \(
аналогично )
как \)
.Далее, я не думаю, что вам нужно чередование, так как вы хотите сопоставлять только десятичные значения, следовательно, для этого вы можете написать это так: \d*\.\d+
, так как это будет соответствовать необязательным цифрам перед десятичной дробью, и так как значение должно быть десятичным, необходимобыть как минимум одной цифрой после .
, следовательно, потребуется \d+
.Вы можете использовать это регулярное выражение,
^NUMERIC\(\d+\.\d+\)$
Демо
Java-коды,
List<String> list = Arrays.asList("NUMERIC(10.78)","NUMERIC(.78)","NUMERIC(1078)");
list.forEach(x -> System.out.println(x + " --> "+x.matches("^NUMERIC\\(\\d+\\.\\d+\\)$")));
Отпечатки,
NUMERIC(10.78) --> true
NUMERIC(.78) --> false
NUMERIC(1078) --> false