获取字符串中的第二个单词,直到'('或''遇到

时间:2017-04-19 05:54:30

标签: sql regex oracle

我想在字符串中获取第二个单词,如下面的代码所示,我正在尝试获取函数的名称unstring。但是我需要一个正则表达式,它将第二个字提取给我,直到'('或遇到空格。

SELECT REGEXP_SUBSTR('FUNCTION unstring(i_string    VARCHAR2', '(\S*)(\S)', 1, 2) 
FROM DUAL;

使用此正则表达式,我得到unstring(i_string作为结果。我正在尝试获取函数的名称,因此函数没有必要有参数,因此'('或''遇到条件。

1 个答案:

答案 0 :(得分:2)

使用\w+匹配单个词,\s+匹配两个词之间的空格。捕获第二个:

select regexp_substr('FUNCTION unstring(i_string    VARCHAR2','^\w+\s+(\w+)', 1, 1, NULL, 1) from dual

模式意味着:

  • ^ - 字符串锚的开始
  • \w+ - 1个或多个字母/数字/ _
  • \s+ - 1+空格
  • (\w+) - 捕获第1组,匹配1个字母字母(字母/数字/ _

最后一个1参数告诉regexp_substr返回第一个捕获组的内容。