繁体   English   中英

使用正则表达式Oracle

[英]Using Regular Expression Oracle

我正在寻找使用正则表达式来捕获字符串中的最后一个值。 我复制了我要解析的数据的示例。 我正在使用oracle语法。

示例数据:

||CULTURE|D0799|D0799HTT|
||CULTURE|D0799|D0799HTT||

我正在寻找最后一组管道之前的最后一个值:

D0799HQTT 
D0799HQTT

我能够创建一个regexp_substr返回文化:

REGEXP_SUBSTR(c.field_name, '|[^|]+|')

但我一直无法弄清楚如何从头开始寻找一个或两个管道,并返回我要寻找的值。 如果您需要更多信息,请与我们联系。

您可以尝试以下方法:

select rtrim(regexp_substr('||CULTURE|D0799|D0799HTT||', 
                     '[[:alnum:]]+\|+$'), '|')
from dual;

或像这样:

select regexp_replace('||CULTURE|D0799|D0799HTT||', 
                     '(^|.*\|)([[:alnum:]]+)\|+$', '\2')
from dual;

这是一个sqlfiddle演示

最好拔出不是管道的所有字符,而不是假定它们适合特定的字符集:

select regexp_replace(regexp_substr('||CULTURE SUBS|INTERNATIONAL TESTING S.A.|ISLAND TEST_PEACE|', '[^|]+\|+$'), '\|', '') from dual;

考虑以下正则表达式...

(?<=\|)[\w\d]*?(?=\|*$)

祝好运!

SELECT  REPLACE
        (
            REGEXP_SUBSTR(str, '\w+\W{0,}$')
        ,   '|'
        ) AS result
FROM
(
        SELECT  '||CULTURE|D0799|D0799HTT|'  AS str FROM DUAL UNION ALL
        SELECT  '||CULTURE|D0799|D0799HTT||' AS str FROM DUAL
)
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM