Строка нужного формата и содержит слово только один раз. Регулярное выражение
Клиент может отправлять такие строки на вход.
ZZZ/USD:0.0001
или
USD/ZZZ:100000
короче это типа конвертера валют.
Я написал регулярное выражение под эту формулу
static String COEFFICIENT_PATTERN =
"^[A-Z]{1,3}+/" + "[A-Z]{1,3}+=" + "[0-1\\u002E]{1,6}";
оно работает.
как дополнить его условием, что должки быть только одно слово USD?
USD/USD=1000 уже не верно
Ответы (1 шт):
В общем случае, чтобы исключть совпадение целой строки, если какое-то одно слово в ней повторяется, можно использовать
static String COEFFICIENT_PATTERN =
"^(?!.*\\bUSD\\b.*\\bUSD\\b)[A-Z]{1,3}/[A-Z]{1,3}:[0-1\\u002E]{1,6}$";
^^^^^^^^^^^^^^^^^^^^^^^^^^
Или, так как повтор определённого слова тут может случиться только в начале строки один раз через /, в данном случае вы можете использовать
static String COEFFICIENT_PATTERN =
"^(?!USD/USD:)[A-Z]{1,3}/[A-Z]{1,3}:[0-1\\u002E]{1,6}$";
^^^^^^^^^^^
Блок предварительного просмотра вперёд(?!.*\\bUSD\\b.*\\bUSD\\b) исключает совпадение, если сразу после текущей позиции (а тут эта позиция - начало строки) есть
.*- 0+ символов, отличных от символов перевода строки, как можно больше\bUSD\b- целое словоUSD.*- 0+ символов, отличных от символов перевода строки, как можно больше\bUSD\b- целое словоUSD.