sql - 如何使用 regexp_substr 提取包名称

标签 sql regex plsql

我想使用 regexp_substr 提取包名称。

例如:

create or replace package body something.pkg_test is

我想要那个:

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 文件并将其插入表之前获得包名称。

最佳答案

我的猜测是,也许您正在尝试编写一些具有积极后视功能的表达式:

(?<=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?

关于sql - 如何使用 regexp_substr 提取包名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57366048/

相关文章:

sql - JOIN 在另一台数据库服务器上的表上与 JOIN 在另一台服务器上的表上的 SELECT

java - 如何使用正则表达式、Java 查找换行符之后开始的单词?

Oracle 从 xmltype 中提取值

mysql - 将 IF 子句从 MySQL 移植到 SQL Server 2005

SQL delete where column_b 不包含 column_a

c# - 正则表达式问题 |需要验证数字范围

javascript - 解析日志文本

oracle - 为什么这里需要立即执行?

java - 我应该如何将键值传递给 PL/SQL 过程?

sql - 在 MS-Access 中比较日期时数据类型不匹配