Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 获取字符串反向的数字索引-PLSQL_Regex_String_Oracle_Plsql - Fatal编程技术网

Regex 获取字符串反向的数字索引-PLSQL

Regex 获取字符串反向的数字索引-PLSQL,regex,string,oracle,plsql,Regex,String,Oracle,Plsql,如何找出字符串反向遇到的第一个数字的索引 例如:“CUSTOMC23VBA”和“CUSTOMC245BA” 因此,函数应该从reverse返回'2'或'3',或者索引值返回'9'或'10' 我可以通过硬编码SUBSTR('CUSTOMC23VBA',-3)获得值,但我希望它作为正则表达式是通用的 字符串中只有一个数字吗?如果是这样,你可以选择这样的方式: select REGEXP_REPLACE('CUSTOMC23VBA', '[[:alpha:]]','') from dual 但当字

如何找出字符串反向遇到的第一个数字的索引

例如:“CUSTOMC23VBA”和“CUSTOMC245BA”

因此,函数应该从reverse返回'2'或'3',或者索引值返回'9'或'10'


我可以通过硬编码SUBSTR('CUSTOMC23VBA',-3)获得值,但我希望它作为正则表达式是通用的

字符串中只有一个数字吗?如果是这样,你可以选择这样的方式:

select REGEXP_REPLACE('CUSTOMC23VBA', '[[:alpha:]]','')  from dual
但当字符串中有多个数字时,此操作将失败。

您可以尝试:

select regexp_instr(reverse('CUSTOM123XYZ'), '[[:digit:]]',1,1) from dual
产出:4

从零开始的索引将是:

select regexp_instr(reverse('CUSTOM123XYZ'), '[[:digit:]]',1,1)-1 from dual
产出:3

如果要从最后一个数字中提取字符串的其余部分,可以使用substr并利用负位置从字符串末尾开始计数:

select substr('CUSTOM123XYZ', -1 * (regexp_instr(reverse('CUSTOM123XYZ'), '[[:digit:]]',1,1)-1)) from dual;
输出:XYZ

测试多个输入字符串的示例:

with d as (
select 'CUSTOM123XYZ' as input_str from dual
union
select 'CUSTOM123XZ' as input_str from dual
union
select 'CUSTOM 1 X 3YZ' as input_str from dual
)
select input_str, 
    substr(input_str, -1 * (regexp_instr(reverse(input_str), '[[:digit:]]',1,1)-1)) as result
from d
输出:

INPUT_STR           RESULT
CUSTOM 1 X 3YZ      YZ
CUSTOM123XYZ        XYZ
CUSTOM123XZ         XZ

不幸的是,我有好几个数字。它可以工作..有没有任何方法可以修改以从第一个遇到的数字的索引中获取剩余的字符串?就是这样,它不是基于0的(1=>Z,2=>Y,3=>X,4=>4)。如果您想要从零开始的索引,只需减去1。看上面的编辑哦,好的。在这种情况下,您希望输出为“XYZ”?还是“21MOTSUC”?还是“定制12”?你太快了。。很抱歉收到最新的更新。。我需要“XYZ”接受答案,因为输出XYZ可以工作,但如果我只有XZ,则同一查询不工作。