Повторите квантификатор POSIX не работает в Amazon Redshift - PullRequest
0 голосов
/ 27 апреля 2018

Мне жаль задавать этот вопрос здесь. Но я не смог найти ничего похожего на stackoverflow / google. Пожалуйста, перенаправьте меня, если есть существующая документация.

Я пытаюсь сопоставить строки, используя регулярное выражение, используя следующий синтаксис:

select regexp_substr('2018-09-90 88:88:90:900 -0900','([0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*:[0-9]* (\\+|-)[0-9]*)')

Это работает отлично, и я получаю вывод как:

2018-09-90 88:88:90:900 -0900

Но использование {} вместо * возвращает null.

select regexp_substr('2018-09-90 88:88:90:900 -0900','([0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*:[0-9]* (\\+|-)[0-9][0-9]{2,})')

1 Ответ

0 голосов
/ 27 апреля 2018

Вы подтвердили, что ни [0-9]{2,}, ни [0-9]\{2,\} не работают для вас.

Это означает, что ваша библиотека регулярных выражений не поддерживает ее или она повреждена.

Чтобы обойти это, вы можете повторить шаблон, используя функцию REPEAT:

[0-9]{m}    = REPEAT('[0-9]', m)
[0-9]{m,}   = REPEAT('[0-9]', m) || '[0-9]*'
[0-9]{m,n}  = REPEAT('[0-9]', m) || CONCAT(REPEAT('[0-9]?', n-m))

Ваш шаблон может быть легко переписан как

'([0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*:[0-9]* [+-][0-9][0-9][0-9][0-9]*)'

, где [0-9]{2,} заменяется на [0-9][0-9][0-9]* (2 обязательные цифры и 0 или более после).

...