Как не заменить слово в шаблоне с помощью regexp_replace? - PullRequest
2 голосов
/ 02 октября 2019

В тексте ниже слово номер появляется дважды. Я хочу не заменять слово, которое появляется между шаблоном <a hef and a>. Есть ли способ избежать слова между этим шаблоном, используя только regexp_replace?

Код не работает должным образом.

with t as (
select 'The Number can be a whole number. <a href https://number.com a>' as text from dual)
select regexp_replace(text,'^[<a href].*number.*[a>]','num') from t

Ожидаемый результат -

The num can be a whole num. <a href https://number.com a>

Ответы [ 2 ]

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

это будет работать:

with t as (
select 'The Number can be a whole number. <a href https://number.com a>' as text from dual)
select regexp_replace(regexp_replace(text,' Number',' num'),' number',' num') from t
0 голосов
/ 02 октября 2019

Я не знаю, как сделать это за один вызов, но вы можете сделать это с несколькими вызовами.

  • Первый вызов: преобразовать вхождения "числа" в href в другую строку
  • Второй вызов: преобразование оставшихся вхождений "число"
  • Третий вызов: преобразование вхождений "другая строка" обратно в "число".

Например,

with t as (
select 'The Number can be a whole number. <a href https://number.com a>' as text from dual)
select regexp_replace(
          regexp_replace(
            regexp_replace(text,'(<a href.*)(number)(.*a>)','\1$$$SAVE_NBR$$$\3'),
              'number', 'num'),
            '\$\$\$SAVE_NBR\$\$\$','number')
from t

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

...