Используйте regexp_count
, чтобы определить количество совпадений (n
), а затем используйте regexp_substr
, чтобы получить n
-ое совпадение.
select
'/step1;somethging;somethig;/step2;something;/step3;something;' string
, '/step[0-9]+[^;]*' pat
, regexp_count(string, pat) n
, regexp_substr(string, pat, 1, n) last_part
выводит:
string pat n last_part
/step1;somethging;somethig;/step2;something;/step3;something; /step[0-9]+[^;]* 3 /step3
если /
можно рассматривать как разделитель, то вы можете альтернативно использовать следующую стратегию
перевернуть строку , разделить на /
и взять первую часть. снова переверните, добавив префикс /
и применив регулярное выражение для извлечения шага:
пример:
select
'/step1;somethging;somethig;/step2;something;/step3;something;' string
, '/' || reverse(split_part(reverse(string), '/', 1)) last_part
, regexp_substr(last_part, '/step[0-9]+[^;]*') extract_step
выходы:
string last_part extract_step
/step1;somethging;somethig;/step2;something;/step3;something; /step3;something; /step3