regexp_substr 去掉第一个正斜杠和第二个正斜杠之间的文本
regexp_substr strip text between first forward slash and second one
/abc/required_string/2/ 应该 return abc 和 regexp_substr
你可以搜索/([^/]+)/
,上面写着:
/
正斜杠
(
子表达式的开始(在其他语言中通常称为 "group")
[^/]
除正斜杠外的任何字符
+
匹配前面的表达式一次或多次
)
子表达式结束
/
正斜杠
你可以使用第 6 个参数来 regexp_substr
到 select 一个子表达式。
这里我们传递 1
以仅匹配 /
之间的字符:
select regexp_substr(txt, '/([^/]+)/', 1, 1, null, 1)
from t1
SELECT REGEXP_SUBSTR ('/abc/blah/blah/', '/([a-zA-Z0-9]+)/', 1, 1, NULL, 1) first_val
from dual;
经典 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>
这是另一种获取字符串中第 2 次出现且后跟正斜杠的方法。如果该元素也恰好为 NULL,它会处理该问题。总是期待意想不到的事情!
注意:如果您使用 [^/]+
的正则表达式形式,并且该元素为 NULL,它将 return "required string" 这不是您所期望的!该表单不处理 NULL 元素。有关更多信息,请参见此处:[
with tbl(str) as (
select '/abc/required_string/2/' from dual union all
select '//required_string1/3/' from dual
)
select regexp_substr(str, '(.*?)(/)', 1, 2, null, 1)
from tbl;
您可以尝试以下方法:
SELECT TRIM('/' FROM REGEXP_SUBSTR(mycolumn, '^\/([^\/]+)'))
FROM mytable;
这个正则表达式将匹配第一次出现的以 /
开头的模式(我习惯性地在正则表达式中转义 /
,因此 \/
不会造成任何伤害)并包括后面的任何非 /
字符。如果没有这样的字符,那么它将 return NULL
.
希望这对您有所帮助。
/abc/required_string/2/ 应该 return abc 和 regexp_substr
你可以搜索/([^/]+)/
,上面写着:
/
正斜杠(
子表达式的开始(在其他语言中通常称为 "group")[^/]
除正斜杠外的任何字符+
匹配前面的表达式一次或多次
)
子表达式结束/
正斜杠
你可以使用第 6 个参数来 regexp_substr
到 select 一个子表达式。
这里我们传递 1
以仅匹配 /
之间的字符:
select regexp_substr(txt, '/([^/]+)/', 1, 1, null, 1)
from t1
SELECT REGEXP_SUBSTR ('/abc/blah/blah/', '/([a-zA-Z0-9]+)/', 1, 1, NULL, 1) first_val
from dual;
经典 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>
这是另一种获取字符串中第 2 次出现且后跟正斜杠的方法。如果该元素也恰好为 NULL,它会处理该问题。总是期待意想不到的事情!
注意:如果您使用 [^/]+
的正则表达式形式,并且该元素为 NULL,它将 return "required string" 这不是您所期望的!该表单不处理 NULL 元素。有关更多信息,请参见此处:[
with tbl(str) as (
select '/abc/required_string/2/' from dual union all
select '//required_string1/3/' from dual
)
select regexp_substr(str, '(.*?)(/)', 1, 2, null, 1)
from tbl;
您可以尝试以下方法:
SELECT TRIM('/' FROM REGEXP_SUBSTR(mycolumn, '^\/([^\/]+)'))
FROM mytable;
这个正则表达式将匹配第一次出现的以 /
开头的模式(我习惯性地在正则表达式中转义 /
,因此 \/
不会造成任何伤害)并包括后面的任何非 /
字符。如果没有这样的字符,那么它将 return NULL
.
希望这对您有所帮助。