假设我具有此列值:
new operational goods123 type 1 for main goods type 9
我想在最后一次出现 type 单词后用替换并使用正则表达式获取数字值。 在这种情况下,我想找到 9 。 我认为正则表达式可能是这样的:
select REGEXP_REPLACE((SELECT REGEXP_REPLACE(' new operational goods123 type 1 for main goods type 2 ',
'[^(type)[:digit:]]',
' ')
FROM dual),
'[^[:digit:]]')
from dual;
但此查询返回 12319 。
答案 0 :(得分:2)
您可以使用
select REGEXP_REPLACE('new operational goods123 type 1 for main goods type 9',
'.*type\s*([0-9]+).*',
'\1',
1,
1,
'n'
) as Result from dual
请参见online demo
模式匹配
.*
-尽可能多的0个字符(包括使用n
修饰符的换行符)type
-字符串type
的最后一次出现(由于前面的贪婪模式)\s*
-0 +空格字符([0-9]+)
-捕获到组1中的1个或更多数字 .*
-字符串的其余部分。替换项包含一个\1
占位符,引用了组1中的值。
第一个1
是搜索引擎的起始位置,第二个1
是“替换操作的发生”(我们只需替换一次)。
答案 1 :(得分:1)
尝试一下
select substr('new operational goods123 type 1 for main goods type 9', instr('new operational goods123 type 1 for main goods type 9', 'type', -1)+ 5) from dual
注意:我假设“类型”后有一个空格