如何使用oracle regexp_substr接收以@开头的字符串的一部分。
我有字符串
sip:+1111@aaa.123.text
我想得到+之间的数字部分(1111
),然后是@。我到目前为止
regexp_substr(str, '\+.*@')
但我不能省略@字符。
答案 0 :(得分:0)
假设您使用的是Oracle 11g(或更高版本)数据库,则只需使用子表达式参数,如下所示:
WITH t AS
(SELECT 'sip:+1111@aaa.123.text' c_str FROM dual
)
SELECT regexp_substr(c_str, '\+(\d*)@',1,1, NULL, 1) FROM t
匹配模式的说明:
转义加号,+
。
对重复数字(\d*)
使用字符分组。具体而言,此字符分组正在查找重复数字\d
,模式的量化为*
,表示0或更多匹配。通过将所需的组封装在括号()
中来识别字符分组。
解释了其他参数:
1, 1, NULL, 1
这些参数表明我从字符串的起始位置开始并查找第一次出现的位置。我将match参数设置为NULL。
最后,最后一个参数1是11g特征,我可以在其中指示匹配的子表达式。由于我只在匹配模式中使用一个子表达式,因此我传递数字,1。
您可以在Oracle 11g documentation中找到更多关于此子表达式引用的示例。