使用regexp_substr排除进程char

时间:2014-09-07 18:09:13

标签: regex oracle regex-negation

如何使用oracle regexp_substr接收以@开头的字符串的一部分。

我有字符串

sip:+1111@aaa.123.text 

我想得到+之间的数字部分(1111),然后是@。我到目前为止

regexp_substr(str, '\+.*@')

但我不能省略@字符。

1 个答案:

答案 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 

匹配模式的说明:

  1. 转义加号,+

  2. 对重复数字(\d*)使用字符分组。具体而言,此字符分组正在查找重复数字\d,模式的量化为*,表示0或更多匹配。通过将所需的组封装在括号()中来识别字符分组。

  3. 解释了其他参数:

    1, 1, NULL, 1
    

    这些参数表明我从字符串的起始位置开始并查找第一次出现的位置。我将match参数设置为NULL。

    最后,最后一个参数1是11g特征,我可以在其中指示匹配的子表达式。由于我只在匹配模式中使用一个子表达式,因此我传递数字,1。

    您可以在Oracle 11g documentation中找到更多关于此子表达式引用的示例。