簡體   English   中英

Oracle regex_replace - 僅提取匹配的字符串

[英]Oracle regex_replace - extract only matched string

例如one > two > three > four > five

單詞four應該是結果字符串。

我有這個表達式來匹配所需的輸出: (?<=^(\\w+\\s>\\s){3})(\\w+)

但它使用這個返回空字符串: REGEXP_SUBSTR (t.column, '(?<=^(\\w+\\s>\\s){3})(\\w+)')

這里有什么問題?
謝謝你。

注意:以“>”符號分隔的字符串可以由兩個或多個單詞組成。 例如: one > two > three > four1 four2 > five應該返回four1 four2

如果它不必是正則表達式解決方案,請使用substr + instr組合( result_1 )。

或者,如果它必須是正則表達式,並且字符串確實看起來像您發布的那樣,請從中獲取第 4 個單詞result_2 )。

select trim(substr(col, instr(col, '>', 1, 3) + 1,
                        instr(col, '>', 1, 4) - instr(col, '>', 1, 3) - 1
                  )) result_1,
       --
       regexp_substr(col, '\w+', 1, 4) result_2
from your_table;  

您需要將非消費模式轉換為消費模式,並使用其他參數來確保REGEXP_SUBSTR返回正確的捕獲:

REGEXP_SUBSTR (t.column, '^([^>]+\s+>\s+){3}\s*([^>]*[^[:space:]>])', 1, 1, NULL, 2)

請注意,正則表達式中不再有后視,並且由於您需要 Group 2 值,因此最后一個參數設置為2

查看Oracle DB 小提琴

SELECT REGEXP_SUBSTR(
    'one > two > three > four or more > five',
    '^([^>]+\s+>\s+){3}\s*([^>]*[^[:space:]>])',
    1, 1, NULL, 2) as Result from dual

輸出:

在此處輸入圖片說明

暫無
暫無

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

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