我有看起来像的字符串
{ABCDE}{F1}
{GHIJ}{K12}
我想提取第一个大括号之间的文本
ABCDE
GHIJ
我尝试在线搜索,但很多答案似乎是使用函数或 PL-SQL。有人可以帮我吗?
原文由 Anish 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是老派。我喜欢正则表达式并且可以理解它们,但是当我尝试生成它们时遇到了很多麻烦。有点像西班牙语(对我来说)。所以这只是 SQL INSTR / SUBSTR / REPLACE。我不期待任何支持…
WITH test_data (raw_text)
AS
(SELECT '{ABCDE}{F1}' from dual UNION ALL
SELECT '{GHIJ}{K12}' from dual
)
SELECT
raw_text
,SUBSTR(raw_text,2,INSTR(raw_text,'}{')-2) first_string
,REPLACE(SUBSTR(raw_text,INSTR(raw_text,'}{')+2),'}') second_string
--these two from Tim's excellent answer
,regexp_substr(raw_text, '\{([^}]+)\}', 1,1,NULL,1)
,regexp_substr(raw_text, '\{([^}]+)\}', 1,2,NULL,1)
FROM
test_data
;
原文由 Christian Palmer 发布,翻译遵循 CC BY-SA 3.0 许可协议
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读
1.4k 阅读
我们可以在这里使用
REGEXP_SUBSTR
:演示
这是
REGEXP_SUBSTR
的不太常见的用法,它使用捕获组,根据此模式:第六个参数表示返回第一个捕获组。