Oracle regexp只匹配某些符号组合后的数字

时间:2017-04-06 20:48:03

标签: sql regex oracle


我有一个大致类似的字符串:
XXXXXXXXX - 1234567 XXXXXXXX
其中X可以是数字,字符串或符号(<,> ,.或space)。 我需要在'之后提取这些数字。 - '。 我试过以下:

select regexp_substr('17.12.12 <XXXXXXXXXX> - 1234567 <XXXXXXXXXX>','(- )[0-9]{1,7}')  from dual


我最终得到了- 1234567。 如何摆脱'- '
提前谢谢

2 个答案:

答案 0 :(得分:1)

这适用于Oracle 11g。

首先将捕获组放在您感兴趣的图案部分周围。由于您需要数字,请使用捕获括号包裹[0-9]{1,7}

然后,将所有6个参数传递给REGEXP_SUBSTR函数,其中第6个参数指示要提取的捕获组的数量:

select regexp_substr('17.12.12 <XXXXXXXXXX> - 1234567 <XXXXXXXXXX>',' - ([0-9]{1,7})', 1,1,NULL,1) from dual

此处,1,1,NULL,1表示:从第1位开始寻找模式匹配,仅用于第一次匹配,没有特定的正则表达式选项,并返回第1组的内容。

答案 1 :(得分:0)

@Gordon Linoff试图说的是:

select substr(regexp_substr('17.12.12 <XXXXXXXXXX> - 1234567 <XXXXXXXXXX>','(- )[0-9]{1,7}'), 3)  
from dual

预留剩余的&#34; - &#34;你的结果。