如何使用regexp_substr提取软件包名称

时间:2019-08-05 21:01:20

标签: sql regex plsql

我想使用regexp_substr提取软件包名称。

例如:

  

创建或替换包主体something.pkg_test是

我想要那个

  

pkg_test

我试图使用lookbehind来忽略“创建或替换包主体内容”。

select regexp_substr('create or replace package body something.pkg_test is','((?<!create\sor\sreplace\spackage\sbody\ssomething\.).)*$',1,1) from dual;

但这不起作用。因此,我只需要提取“创建或替换包主体内容”与第一个空格或\ n之间的包名称。

我需要它,因为在编译.sql文件并将其插入表之前,我需要包名称。

1 个答案:

答案 0 :(得分:4)

我的猜测是,也许您正在尝试写一些正向后看的表达式:

(?<=create\sor\sreplace\spackage\sbody\ssomething\.)\S*

或者,或者,我们可能会使用一些没有环顾四周的表达式,例如:

create\sor\sreplace\spackage\sbody\ssomething\.(\S*).*

具有捕获组1,我们的代码可能类似于:

select regexp_replace('create or replace package body something.pkg_test is', 'create\sor\sreplace\spackage\sbody\ssomething\.(\S*).*', '\1') from dual;

虽然不确定。

Demo 2


演示

该表达式在regex101.com的右上角进行了解释,如果您想探索/简化/修改它,在this link中,您可以观察到它如何与某些示例输入匹配,如果愿意的话。


参考

How to extract group from regular expression in Oracle?