Oracle regexp_replace необязательная группа - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть строка «СПЕЦИФИЧЕСКОЕ СЛОВО БОЛЬШОЙ МИР, СПЕЦИАЛЬНОЕ СЛОВО БОЛЬШОЕ СОЛНЦЕ».Выходная строка должна выглядеть следующим образом: «SPECIFIC WORD, SPECIFIC WORD».Другими словами, я хочу удалить все после «SPECIFIC WORD», но хочу сохранить запятые.Что я пробовал до сих пор:

 declare
 l_string varchar2(10000);
 begin
    l_string := 'SPECIFIC WORD BIG WORLD, 
    SPECIFIC WORD BIG SUN, 
    SPECIFIC WORD BIG EARTH';
    dbms_output.put_line(l_string);
    l_string := regexp_replace(l_string, '(SPECIFIC WORD) (BIG)(.*)(,)?', '\1\4');
    dbms_output.put_line(l_string);
 end;
 /

Проблема, с которой я столкнулся, заключается в том, что при последнем совпадении не будет запятой, но когда я отмечаю эту запятую как дополнительную последовательность, я вообще не получаю запятых.Есть ли способ обойти это?Я также пытался исправить это, играя с: https://regex101.com/, но я не мог сделать необязательные запятые, ведущие себя как отдельная группа.

1 Ответ

0 голосов
/ 01 февраля 2019

Из того, что вы описали, должно хватить следующего:

l_string := regexp_replace(l_string, ' BIG \w+', '');

Это просто ищет

  • пробел
  • , за которым следует БОЛЬШОЙ
  • , за которым следует пробел
  • , за которым следует символ Word, от одного до неограниченного числа раз
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...