RegExp найти и заменить игнорируя совпадения частей - PullRequest
2 голосов
/ 07 марта 2019

У меня есть строка в формате:

'(val$1,val$1,val$1,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)'

, и я пытаюсь заменить текст val$1 на какой-нибудь текст, например XYZ

Соответствует только val$1выдаст:

'(XYZ,XYZ,XYZ,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,XYZ0,XYZ1,XYZ2)'

Если кому-то захочется дать мне руку, я бы хотел знать, что reg exp проигнорирует те, что в конце, так что строка перезапуска будет выглядеть так:

'(XYZ,XYZ,XYZ,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)'

Заранее спасибо, Duncs

Ответы [ 3 ]

0 голосов
/ 07 марта 2019

Вам действительно нужны регулярные выражения для этого?Выглядит как простая задача для старой доброй функции REPLACE.Если вам нужно иметь дело с большим количеством данных, регулярное выражение, вероятно, будет намного медленнее.

SQL> select replace('(val$1,val$1,val$1,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)',
  2                 'val$1,', 'xyz,') result
  3  from dual;

RESULT
----------------------------------------------------------------------------------
(xyz,xyz,xyz,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)

SQL>
0 голосов
/ 08 марта 2019

Вы также можете найти "val$1", за которым следует запятая или закрывающая скобка (если она находится в конце строки).

'val\$1(,|\\)', 'XYZ\1'
0 голосов
/ 07 марта 2019

Вы можете добавить дополнительную цифру \D к шаблону для regexp_replace

select regexp_replace('(val$1,val$1,val$1,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,
                        val$10,val$11,val$12)','\val\$1(\D)','XYZ\1') as "Result"
  from dual;

Result
----------------------------------------------------------------------------------
(XYZ,XYZ,XYZ,val$2,val$3,val$4,val$5,val$6,val$7,val$8,val$9,val$10,val$11,val$12)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...