管道前文本的 SQL 正则表达式



我需要一个预言机正则表达式来获取第一个管道之前和管道前文本最后一个斜杠之后的数据。

例如,从字符串:

test=file://2019/13/40/9/53/**2abc123-7test-1edf-9xyz-12345678.bin**|type

要获取的数据是:

2abc123-7test-1edf-9xyz-12345678.bin

这在甲骨文中有效:

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)

现场演示在这里

正则表达式细分:

  • /字面意思匹配
  • (开始捕获组 #1
    • [^/|]+匹配除斜杠和竖线以外的任何内容,至少一个字符
  • )CG #1 的结尾
  • |匹配管道
[^/]*?(?=|)
  • [^/]*?— 匹配任何不是反斜杠的字符

  • (?=|)— 积极的前瞻以匹配垂直线

最新更新