Группы соответствия в регулярных выражениях Oracle 10g2 - PullRequest
1 голос
/ 19 октября 2010

Мне нужно извлечь некоторые данные из искаженного XML-файла, хранящегося в базе данных Oracle.Выражения XPath будут выглядеть так: //image/type/text().Один из регулярных выражений, который будет работать подобным образом, будет <image>.*?<type>(.+?)<\/type> (с соответствующими флагами для многострочного сопоставления).

Поскольку Oracle не поддерживает группы совпадений в любой форме для REGEXP_SUBSTR, я не уверенКак извлечь набор (с потенциально n > 1 членами) групп совпадений из столбца Oracle CLOB.Есть идеи?

1 Ответ

2 голосов
/ 20 октября 2010

AFAIK: вы не можете извлечь набор с помощью функций регулярного выражения Oracle напрямую, но вы можете перебирать строку, вызывая функцию regex_substr и сохраняя результат в коллекцию (или что вам нужно) в качестве обходного пути, что-то вроде этого:

...
fOccurence := 0;
loop
  fSubstr := regex_substr(fSourceStr, '<image>.*?<type>(.+?)<\/type>', 1, fOccurence, 'gci');
  exit when fSubstr is null;
  fOccurence := fOccurence + 1;
  fResultStr := fResultStr || fSubstr;
end loop;
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...