Как мне разобрать строку в Oracle? - PullRequest
4 голосов
/ 22 июня 2011

Как можно проанализировать значение «запроса» в следующей строке в Oracle?

<!-- accountId="123" activity="add" request="add user" -->

Размер и позиция запроса являются случайными.

Ответы [ 5 ]

6 голосов
/ 22 июня 2011

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

regexp_replace(str, '.*request="([^"]*)".*', '\1')
4 голосов
/ 22 июня 2011

Используйте INSTR(givenstring, stringchartosearch,start_position), чтобы найти позицию 'request = "' и найти позицию закрытия" "".

Затем используйте substr(string, starting_position, length).

1 голос
/ 22 июня 2011

Вы бы использовали комбинацию instr и substr

ДАННЫЙ ПРИМЕР ТОЛЬКО ДЛЯ ПРИМЕРНЫХ ЦЕЛЕЙ. НЕ ИСПОЛЬЗУЙТЕ ЕГО В ПРОИЗВОДСТВЕННОМ КОДЕКСЕ, ЧТО ЭТО ОЧЕНЬ ЧИСТО

substr(my_str, 
       -- find request=" then get index of next char.
       instr(my_str, 'request="') + 9, 
       -- This is the second " after request. It does not allow for escapes
       instr(substr(my_str,instr(my_str, 'request="')), 2))
0 голосов
/ 07 января 2017

Обратите внимание, что знак равенства "=" не обязательно должен идти сразу после переменной запроса в назначении.Поэтому поиск «request =» не совсем корректен.Вы должны создать базовый конечный автомат, используя INSTR, чтобы сначала найти «запрос», затем найти «=», ...

0 голосов
/ 22 июня 2011

Ниже приведены мои проверенные варианты от cwallenpoole и Craig.Для регулярного выражения - обратите внимание, что если «request =» не существует, результатом будет вся строка.user349433 тоже был частично там, пробел перед "request =" в поиске также работает:

...