Суть в том, что вам нужно использовать первую часть как отрицательный прогноз, чтобы добавить исключение к другому шаблону:
^(?!\d{1,2}[.]\d{1,2}[.]\d{2,4}$)((($|EUR)? ?[-+]?(\d{1,8}[.,])*\d+([.,]\d+)?)|([-+]?(\d{1,8}[.,])*\d+([.,]\d+)? ?($|€|EUR)?))$
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
См. Демонстрационный пример regex
Таким образом, вместо того, чтобы требовать шаблон исключения и затем не соответствовать фиктивной строке, имеет смысл просто использовать действительный шаблон соответствия и добавить исключение в начале.
Я также вижу ($|€|EUR)?
, вы, вероятно, хотели найти здесь символ доллара. Если я прав, замените его на ([$€]|EUR)?
. Кроме того, ($|EUR)?
также может потребоваться заменить на ([$€]|EUR)?
.
Кроме того, рассмотрите возможность использования не захватывающих групп , а не собирающих группы, поскольку вы говорите, что заинтересованы только в значениях полного соответствия .