首页 > 解决方案 > 正则表达式随后捕获字符之前的第一个单词 - oracle

问题描述

我如何捕获 = 符号之前的单词,URL 中有另一个我不想捕获的等号

 SELECT
  REGEXP_SUBSTR('TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3',
                '([^|]+)=', 1,1,NULL,1) "TType"    
  FROM DUAL;

从上面的字符串TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3

我只想要TType,Status,URL,day

注意:字符串有一个管道分隔符 | 对于参数

标签: regexoracle

解决方案


您可以使用

SELECT
  TRIM(',' FROM REGEXP_REPLACE('TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3',
                '=[^|]+($|\|)', ',')) "TType"    
  FROM DUAL

REGEXP_REPLACE查找并用逗号替换所有匹配的=[^|]+($|\|)模式

  • =- 一个=字符
  • [^|]+- 一个或多个字符|
  • ($|\|)- 字符串结尾或|.

查看在线演示


推荐阅读