簡體   English   中英

如何從Oracle中的正則表達式中提取組?

[英]How to extract group from regular expression in Oracle?

我得到此查詢,並想提取方括號之間的值。

select de_desc, regexp_substr(de_desc, '\[(.+)\]', 1)
from DATABASE
where col_name like '[%]';

但是,它為我提供了帶有方括號“ [TEST]”的值。 我只想要“測試”。 如何修改查詢以獲取查詢?

REGEXP_SUBSTR函數的第三個參數指示目標字符串(在示例中為de_desc )中要開始搜索的位置。 假設在字符串的給定部分找到了匹配項,則不影響返回的內容。

在Oracle 11g中,該函數有第六個參數,我認為這是您要使用的參數,它指示您要返回的捕獲組。 正確使用的一個示例是:

SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;

最后一個參數1表示要返回的捕獲組的編號。 這是描述該參數的文檔的鏈接

10g似乎沒有此選項,但是您可以通過以下方法獲得相同的結果:

select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);

因為您知道比賽在開始和結束時都會有一個多余的字符。 (或者,您可以使用RTRIM和LTRIM從結果的兩端刪除方括號。)

您需要進行替換,並使用匹配整個字符串的正則表達式模式。

select regexp_replace(de_desc, '.*\[(.+)\].*', '\1') from DATABASE;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM