簡體   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