Я пытаюсь сопоставить точный шаблон, чтобы выполнить некоторую очистку данных для ISSN, используя приведенный ниже код:
select case when REGEXP_REPLACE('1234-5678 ÿþT(zlsd?k+j''fh{l}x[a]j).,~!@#$%^&*()_+{}|:<>?`"\;''/-', '([0-9]{4}[\-]?[Xx0-9]{4})(.*)', '$1') not similar to '[0-9]{4}[\-]?[Xx0-9]{4}' then 'NOT' else 'YES' end
Шаблон, который я хочу, соответствует любой 8-значной группе с возможной чертой в середине ивозможно X в конце.
Приведенный выше код работает в большинстве случаев, но если в следующем примере используется группа захвата 1: 123456789
, то он также возвращает положительное значение, поскольку он соответствует первым 8 цифрам, и я неЯ не хочу этого.
Я пытался окружить группу захвата 1 с помощью ^...$
, но это тоже не работает.
Так что я хотел бы точно подобрать эти примеры и похожие:
1234-5678
1234-567X
12345678
1234567X
НО ЭТО (и тому подобное):
1234567899
1234567899x
Чего мне не хватает?