Sql 如何使用regexp\u substr提取包名

Sql 如何使用regexp\u substr提取包名,sql,regex,plsql,Sql,Regex,Plsql,我想使用regexp\u substr提取包名 例如: 创建或替换包体。pkg_测试为 我希望: pkg_试验 我试图使用lookbehind来忽略“创建或替换包体” select regexp_substr('create or replace package body something.pkg_test is',')((?我猜,可能您正在尝试编写一些具有正面外观的表达式: (?<=create\sor\sreplace\spackage\sbody\ssomething\.)\S*

我想使用regexp\u substr提取包名

例如:

创建或替换包体。pkg_测试为

我希望:

pkg_试验

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


select regexp_substr('create or replace package body something.pkg_test is',')((?我猜,可能您正在尝试编写一些具有正面外观的表达式:

(?<=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;
不过我不确定


演示 如果您希望探索/简化/修改该表达式,将在的右上面板中对其进行解释。在中,如果您愿意,可以查看它与一些示例输入的匹配情况


参考文献

如果你想检查一个包名,为什么不做一个简单的
检查而不是用regexp提取?
如果行像“create%或%replace%package%body%something.pkg\u test%”那么…
。这并不是很简单,但应该可以满足你的需要。我想提取包名并在编译之前将其插入表中。我只需要.sql文件。我不知道包名是什么。我将“check”改为“想要包名”你也可以考虑可选的关键字<代码>可编辑的< /C>和<代码>不可编辑的<代码>。即使几乎没有人关心它们,很多工具会自动生成它们,它们可能会出现在DDL中。“JonHeller,你有一点。我现在考虑一下,我知道怎么做。这工作在你的链接中,但它不起作用。我不知道为什么。
create\sor\sreplace\spackage\sbody\ssomething\.(\S*).*
select regexp_replace('create or replace package body something.pkg_test is', 'create\sor\sreplace\spackage\sbody\ssomething\.(\S*).*', '\1') from dual;