regexp_substr在第一个正斜杠和第二个正斜杠之间剥离文本

时间:2018-04-18 18:32:04

标签: sql regex oracle regexp-substr

/ abc / required_string / 2 /应该使用regexp_substr返回abc

5 个答案:

答案 0 :(得分:1)

您可以搜索/([^/]+)/,其中包含:

  • /正斜杠
  • (子表达式的开头(通常在其他语言中称为“group”)
    • [^/]除正斜杠之外的任何字符
    • +匹配前面的表达式一次或多次
  • )子表达式结束
  • /正斜杠

您可以使用regexp_substr的第6个参数来选择子表达式。 在这里,我们传递1以仅匹配/ s:

之间的字符
select  regexp_substr(txt, '/([^/]+)/', 1, 1, null, 1)
from    t1

See it working at SQL Fiddle.

答案 1 :(得分:1)

SELECT REGEXP_SUBSTR ('/abc/blah/blah/', '/([a-zA-Z0-9]+)/', 1, 1, NULL, 1) first_val 
from dual;

答案 2 :(得分:1)

经典SUBSTR + INSTR提供简单的解决方案;我知道你指定了正则表达式,但是 - 考虑到这一点,对于大数据量可能更好

SQL> with test (col) as
  2    (select '/abc/required_string/2/' from dual)
  3  select substr(col, 2, instr(col, '/', 1, 2) - 2) result
  4  from test;

RES
---
abc

SQL>

答案 3 :(得分:1)

这是另一种获得第二次出现的字符串后跟正斜杠的方法。如果该元素恰好为NULL,它也会处理该问题。总是期待意外!

注意:如果使用library(tidyverse) df %>% filter(str_detect(as.character(lob), as.character(prod))) 的正则表达式,并且该元素为NULL,则返回"必需字符串"这不是你所期待的!该表单不处理NULL元素。有关详细信息,请参阅此处:[https://stackoverflow.com/a/31464699/2543416]

[^/]+

答案 4 :(得分:1)

您可以尝试以下方法:

SELECT TRIM('/' FROM REGEXP_SUBSTR(mycolumn, '^\/([^\/]+)'))
  FROM mytable;

这个正则表达式将匹配以/开头的模式的第一次出现(我习惯性地在正则表达式中转义/,因此\/不会伤害任何东西)并包括随后的任何非/个字符。如果没有这样的字符,那么它将返回NULL

希望这有帮助。