需要一个正则表达式来获取由下划线分隔的字符串

时间:2017-06-22 17:15:12

标签: sql regex oracle oracle11g

需要正则表达式以字符串分隔下划线

我有字符串one_two_three_four

我需要一个正则表达式才能从上面的字符串中获取第二个字符串two

更多信息已添加:

我想要这个正则表达式,因为我有一个rdbms表,其中一列中的数据格式为'one_two_three_four',我只想在获取时从列中得到'两个'。使用以下查询。而是我再次获取数据并在java中分割数据。

select distinct(REGEXP_SUBSTR(column_name, 'regex'))  
from table_name

1 个答案:

答案 0 :(得分:1)

在Oracle中,您确实可以使用regexp_substr 或者将正常的substr与instr结合起来获得下划线的位置。

例如:

select 
 -- getting the 2nd match with non-underscore characters
 regexp_substr(val, '[^_]+', 1, 2) as method1,

 -- getting the (capture group)
 regexp_substr(val, '^.*?_(.*?)_', 1, 1, null, 1) as method2,

 -- substring on the positions of the underscores
 substr(val,instr(val,'_')+1,instr(val,'_',1,2)-instr(val,'_')-1) as method3

from (
    select 'one_two_three_four' as val from dual
) q

在像Java这样的编程语言中? 为什么正则表达式可以拆分?

String str = "one_two_three_four";

将字符串拆分为数组并取出元素1

String[] strArray = str.split("_");
String secondSplit = strArray[1];

或者一次性拍摄:

String secondSplit = str.split("_")[1];

顺便说一下,split也需要正则表达式。 所以这也适用:

String secondSplit = str.split("[_]")[1];