当字符串包含 ( 和 ) 时,使用 regexp_substr 提取字符串的一部分

Posted

技术标签:

【中文标题】当字符串包含 ( 和 ) 时,使用 regexp_substr 提取字符串的一部分【英文标题】:extracting portion of string using regexp_substr when it contains ( and ) 【发布时间】:2012-08-28 18:33:20 【问题描述】:

我想在 oracle 中使用正则表达式提取字符串的以下部分:

String: FN_SUM(ACCRUED_INTEREST)
Output expected: ACCRUED_INTEREST

我试过了:

select regexp_substr('FN_SUM(ACCRUED_INTEREST)','([^)]') from dual;

这给了我 ORA-12725 错误。

非常感谢任何使用正则表达式的解决方案。

【问题讨论】:

您是否只想删除文字FN_SUM?或者您是否正在尝试构建一个更通用的正则表达式来删除任意函数名称? 【参考方案1】:

试试:

select regexp_replace('FN_SUM(ACCRUED_INTEREST)', '(.*)?\((.*)?\)(.*)?$','\2') from dual;

【讨论】:

谢谢。它有效。不知道替换可以解决它......但是,有可能解释这一点吗?我想知道你是怎么想到这个的! 那个?使它不贪婪。因此,(.*)?( 匹配 FN_SUM(, (.*)?) 匹配 ACCRUED_INTEREST,并且 (.*)?$ 匹配剩余的所有内容。\2 获取第二个匹配项(输入括号内的部分)【参考方案2】:

为什么不用常规替换

select replace( replace('fn_sum(value)'
               , substr('fn_sum(value)', 1, instr('fn_sum(value)', '(')))
               , ')') 
  from dual

【讨论】:

我已经知道这可以使用传统的 substr/replace/instr 来完成。但是,想知道如何使用正则表达式。

以上是关于当字符串包含 ( 和 ) 时,使用 regexp_substr 提取字符串的一部分的主要内容,如果未能解决你的问题,请参考以下文章

RegExp对象

当字符串中出现不需要的字符时限制 regexp_substr 响应(返回空响应)

替换多个文件中的多个字符串

oracle 正则表达式?=

使用 lodash _.words 时如何不分隔破折号/连字符?

JS笔记5.4 RegExp类型