[英]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
。
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.