требуется регулярное выражение для замены func_1 (func_2 (a, b)) на func_1_func_2 (a, b) - PullRequest
0 голосов
/ 22 мая 2018

Было бы здорово, если бы кто-нибудь помог мне с нижеуказанными требованиями

regex_replace(source,search_pattern,replace_pattern)

1)

Input :func_1(func_2(a,b))

output :func_1_func_2(a,b)

2)

func_1(func_2())

output :func_1_func_2()

3)

func_1(func_2()) + 3

output :func_1_func_2() + 3

4)

func_1(func_2()) + func_1(func_3()) 

output :func_1_func_2() + func_1_func_3()

Пробовал

select REGEXP_REPLACE('func_1(func_2(a,b))','func_1\(','func_1_') from dual ;

получил func_1_func_2(a,b)).

есть дополнительная) в конце

также в вышеуказанных случаях func_1 имеет только 5 возможных значений

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Попробуйте этот шаблон.Это работает для всех ваших примеров.Надеюсь, это должно работать для других, которые вы не показали.

select REGEXP_REPLACE(s,'(func_.)\((func_.\(.*?\))\)','\1_\2') from t ;

enter image description here

Dbfiddle demo

0 голосов
/ 22 мая 2018

Регулярное выражение: (\w+)(\()([\w(),]+)(\))

Заменить на: \1_\3

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...