REGEXP_SUBSTR - 如何在“ ”之间返回值?

问题描述

我需要从字符串下方的 ' ' 返回值(例如,对于 psOrderByClause,我需要值 xxx_seqno)。此外,我还需要为某些变量返回 TRUE/FALSE 值 - 没有单引号(例如,pbUsedisplayName 我需要 TRUE)。

我不必在一个查询中,每个变量都应该有单独的查询(例如,psOrderByClausepsSeparator 等)

prcCSVGenerator(pnRunKey => pnRunKey,pnConfigKey => pnConfigKey,psOrderByClause => 'xxx_seqno',psSeparator => '|',pbUsedisplayName => TRUE,pbUseWindowSEOL => TRUE);

例如从上面的字符串我需要在一个查询中返回 xxx_seqnoTRUE一个

并不总是像上面那样的“空格”,有时看起来像“psOrderByClause=> 'xxx_seqno'”或“psOrderByClause=>'xxx_seqno'” >

我感觉 Regex 不太好,我只有这样的东西,但这会返回 psSeparator 之后的所有字符

REGEXP_SUBSTR (text,'(psSeparator)(.*)',1,'i',2) 正则表达式

有人可以帮我吗?

谢谢

解决方法

您可以使用:

SELECT REGEXP_SUBSTR(
         value,q'[psOrderByClause\s*=>\s*('(''|[^'])*'|.*?)\s*(,|\))]',1,'i',1
       ) AS psOrderByClause,REGEXP_SUBSTR(
         value,q'[psSeparator\s*=>\s*('(''|[^'])*'|.*?)\s*(,1
       ) AS psSeparator,q'[pbUseDisplayName\s*=>\s*('(''|[^'])*'|.*?)\s*(,1
       ) AS pbUseDisplayName,q'[pbUseWindowsEOL\s*=>\s*('(''|[^'])*'|.*?)\s*(,1
       ) AS pbUseWindowsEOL
FROM   table_name

对于样本数据:

CREATE TABLE table_name ( value ) AS
SELECT 'prcCSVGenerator(pnRunKey => pnRunKey,pnConfigKey => pnConfigKey,psOrderByClause => ''xxx_seqno'',psSeparator => ''|'',pbUseDisplayName => TRUE,pbUseWindowsEOL => TRUE);' FROM DUAL

输出:

PSORDERBYCLAUSE PSSEPARATOR PBUSEDISPLAYNAME PBUSEWINDOWSEOL
'xxx_seqno' '|' 真的 真的

如果您不想要周围的引号,则可以根据需要修剪它们。

dbfiddle here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...