/ abc / required_string / 2 /应该使用regexp_substr返回abc
答案 0 :(得分:1)
您可以搜索/([^/]+)/
,其中包含:
/
正斜杠(
子表达式的开头(通常在其他语言中称为“group”)
[^/]
除正斜杠之外的任何字符+
匹配前面的表达式一次或多次)
子表达式结束/
正斜杠您可以使用regexp_substr
的第6个参数来选择子表达式。
在这里,我们传递1
以仅匹配/
s:
select regexp_substr(txt, '/([^/]+)/', 1, 1, null, 1)
from t1
答案 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
。
希望这有帮助。