Поддерживает ли снежинка положительный взгляд назад в регулярном выражении?

Я хочу использовать положительный взгляд назад как часть моего выражения regexp_substr.

У меня есть ниже:

regexp_substr(My_Data, '(?<=id:).*(?=;)', 1, 1)

что дает мне следующую ошибку:

Недопустимое регулярное выражение: '(?‹=id:).*(?=;)', без аргумента для оператора повторения: ?

Я пытаюсь разделить пары значений ключа, где у меня есть

id:1234;


person Neil P    schedule 11.01.2019    source источник
comment
В то время как функции регулярных выражений Snowflake не поддерживают группы без захвата, просмотр вперед и просмотр назад, Snowflake поддерживает JavaScript и поддерживает все это. Вы можете написать JavaScript UDF, чтобы получить группы без захвата или обходные пути. Я также написал библиотеку пользовательских функций JavaScript, которые максимально приближены к синтаксису функций регулярных выражений Snowflake и поддерживают эти возможности: snowflake.pavlik.us/index.php/2020/11/20/   -  person Greg Pavlik    schedule 24.11.2020


Ответы (1)


Look-behind не поддерживается в регулярном выражении Snowflake.

Однако вы можете использовать обычные группы регулярных выражений для того, чего вы пытаетесь достичь:

select regexp_substr('Something,id=12345;Somethng', 'id=([^;]+);',1, 1, 'e');
-----------------------------------------------------------------------+
 REGEXP_SUBSTR('SOMETHING,ID=12345;SOMETHNG', 'ID=([^;]+);',1, 1, 'E') |
-----------------------------------------------------------------------+
 12345                                                                 |
-----------------------------------------------------------------------+

Обратите внимание на аргумент 'e' для извлечения, см. документация.

person Marcin Zukowski    schedule 13.01.2019