正则表达式随后捕获字符之前的第一个单词 - Postgresql [英] Regex capture first words before character subsequently - Postgresql
问题描述
参考这个问题但现在在postgress我如何捕获 = 符号之前的单词,URL 中还有另一个我不想捕获的等号
With refference to this question but now in postgress How do i capture the word before the = sign, there is another equal sign in the URL which i do not want to capture
SELECT
TRIM(',' FROM REGEXP_REPLACE('TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3',
'=[^|]+($|\|)', ',')) "PARAMS"
来自上面的字符串 TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3
我只想要TType,Status,URL,day
注意:字符串有一个管道分隔符 |对于参数
Note: The string has a pipe delimiter | for the parameters
推荐答案
可以使用
SELECT ARRAY_TO_STRING (
ARRAY (
SELECT REGEXP_MATCHES (
'TType=SEND|Status=OK|URL=min://j?_a=3&ver=1.1|day=3',
'(?:\||^)(\w+)=', 'g'
)
), ',') as PARAMS
查看正则表达式演示.
注意:如果在正则表达式模式中定义了捕获组,REGEXP_MATCHES
仅返回捕获组值.在这里,模式意味着
NOTE: REGEXP_MATCHES
returns only capturing group value if a capturing group is defined in the regex pattern. Here, the pattern means
(?:\||^)
- (非捕获组匹配)|
或字符串开头(\w+)
- 捕获组 1(实际返回值):任何一个或多个字母数字字符=
-=
字符.
(?:\||^)
- (a non-capturing group matching either)|
or start of string(\w+)
- Capturing group 1 (the actual return value): any one or more alphanumeric chars=
- a=
char.
REGEXP_MATCHES
结果先是大小写到数组,然后转换为带有 ARRAY_TO_STRING
的字符串.
The REGEXP_MATCHES
result is case to an array first and then conveted to a string with ARRAY_TO_STRING
.
这篇关于正则表达式随后捕获字符之前的第一个单词 - Postgresql的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!