вопрос о подстроке регулярного выражения оракула - PullRequest
0 голосов
/ 25 октября 2019

Я изо всех сил пытаюсь придумать регулярное выражение, которое извлекает все с шаблоном между "abc_" и "&"

Example 1: 

Input string: abc_s=facebook&abc_m=social&abc_c=abcd-video&clicks=jfhjkfdjfdjkfh

Output string: abc_s=facebook&abc_m=social&abc_c=abcd-video

Example 2: 

input string: abc_s=facebook&abc_m=social&gmpc_c=abcd-ideo&clicks=jfhjkfdjfdjkfh

output string: abc_s=facebook&abc_m=social&

любые идеи о том, как этого добиться ... я посмотрел надокументация, но мне не очень понятно, как использовать функцию regexp_substr для достижения этой цели.

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Звучит так, будто вы пытаетесь выполнить подстроку от «первого» abc_ »до« первого »&, за которым не следует« abc_ ». Для начальной части будет работать обычный INSTR;для конечного условия вам понадобится регулярное выражение.

set scan off
-- example data
with x as (select 'abc_s=facebook&abc_m=social&abc_c=abcd-video&clicks=jfhjkfdjfdjkfh' as s from dual
           union select 'abc_s=facebook&abc_m=social&gmpc_c=abcd-ideo&clicks=jfhjkfdjfdjkfh' from dual
           union select 'www.google.com/search?abc_source=blah&abc_medium=blahblah&abc_campaign=blahblah' from dual)
-- query
SELECT SUBSTR(s,
              INSTR(s, 'abc_'), -- start with the first 'abc_'
              regexp_instr(s, '(&[^a][^b][^c][^_])|$')-1 -- end with the first & that isn't followed by "abc_"; or the end
              ) AS OUTPUT_STR
FROM x;

Вывод:

abc_s=facebook&abc_m=social&abc_c=abcd-video                      
abc_s=facebook&abc_m=social
abc_source=blah&abc_medium=blahblah&abc_campaign=blahblah

В качестве примечания, если вы пытаетесь разделить разделенный '&' разделенныйзначений в список, попробуйте посмотреть на один из вопросов о разбиении значений через запятую , но используйте & вместо запятой.

0 голосов
/ 25 октября 2019

Вы можете добиться этого, используя комбинацию instr и substr следующим образом:

SELECT SUBSTR(INPUT_STR,
              1, INSTR(SUBSTR(INPUT_STR, (INSTR(INPUT_STR, 'abc_', -1) + 4)), '&')) AS OUTPUT_STR
FROM YOUR_TABLE

Попробуйте и дайте мне знать, если это работает для вас?

Ура!

...