SQL 管道前文本的正则表达式
SQL regex expression for text before pipe
我需要一个 oracle 正则表达式来从管道之前的文本中的第一个管道之前和最后一个斜线之后获取数据。
例如,来自字符串:
test=file://2019/13/40/9/53/**2abc123-7test-1edf-9xyz-12345678.bin**|type
要获取的数据是:
2abc123-7test-1edf-9xyz-12345678.bin
模式 ^.+?/([^/]+?)\|
从字符串的开头开始,跳过每个字符,然后捕获最后一个斜线和第一个竖线之间的所有非斜线字符。
[^\/]*?(?=\|)
[^\/]*?
— 匹配任何不是反斜杠的字符
(?=\|)
— 匹配垂直线的正前瞻
这适用于 Oracle:
select regexp_substr(col,'[^|/]+\.\w+',1,1,'i')
from (
select 'test=file://2019/13/40/9/53/2abc123-7test-1edf-9xyz-12345678.bin|type=app/href|size=1234|encoding=|locale=en_|foo.bar' as col
from dual
) q
您可以使用:
REGEXP_SUBSTR(column, '/([^/|]+)\|', 1, 1, NULL, 1)
正则表达式细分:
/
字面匹配
(
捕获组 #1 开始
[^/|]+
匹配除斜线和竖线以外的任何字符,至少一个字符
)
CG #1 结束
\|
匹配管道
我需要一个 oracle 正则表达式来从管道之前的文本中的第一个管道之前和最后一个斜线之后获取数据。
例如,来自字符串:
test=file://2019/13/40/9/53/**2abc123-7test-1edf-9xyz-12345678.bin**|type
要获取的数据是:
2abc123-7test-1edf-9xyz-12345678.bin
模式 ^.+?/([^/]+?)\|
从字符串的开头开始,跳过每个字符,然后捕获最后一个斜线和第一个竖线之间的所有非斜线字符。
[^\/]*?(?=\|)
[^\/]*?
— 匹配任何不是反斜杠的字符(?=\|)
— 匹配垂直线的正前瞻
这适用于 Oracle:
select regexp_substr(col,'[^|/]+\.\w+',1,1,'i')
from (
select 'test=file://2019/13/40/9/53/2abc123-7test-1edf-9xyz-12345678.bin|type=app/href|size=1234|encoding=|locale=en_|foo.bar' as col
from dual
) q
您可以使用:
REGEXP_SUBSTR(column, '/([^/|]+)\|', 1, 1, NULL, 1)
正则表达式细分:
/
字面匹配(
捕获组 #1 开始[^/|]+
匹配除斜线和竖线以外的任何字符,至少一个字符
)
CG #1 结束\|
匹配管道