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

MySql & TeraData 也有这样的 REGEXP_SUBSTR 功能,但还没有在那些上测试过。

您可以使用:

REGEXP_SUBSTR(column, '/([^/|]+)\|', 1, 1, NULL, 1)

直播demo here

正则表达式细分:

  • /字面匹配
  • ( 捕获组 #1 开始
    • [^/|]+ 匹配除斜线和竖线以外的任何字符,至少一个字符
  • ) CG #1 结束
  • \|匹配管道