0

我有以下输入字符串:

string1: xyx;;;;str1=P1:P2|str2=1/3|str3=s1:s2

string2: mzn;;;;str1 = P3:P4 | str2 = 2/5

预期结果:对于 string1:str1_val=P1:P2 str2_val=1/3

对于字符串 2:str1_val=P3:P4 str2_val=2/5

我试过 str1_val= REGEXP_SUBSTR('xyx;;;;str1=P1:P2|strt2=1/3|str3=s1:s2', '(?<=str1=)(. ?)(?=|)' ) - 工作正常 str2_val=REGEXP_SUBSTR('xyx;;;;str1=P1:P2|str2=1/3|str3=s1:s2', '(?<=str2=)(. ?)(?=|) ') - 工作正常

对 string1 工作正常,但对 string2 不工作。请帮助一种适用于两种情况的方法

4

1 回答 1

0

您需要添加可选空格,但后向仅允许固定长度匹配。但\K类似的是,它重置了比赛的开始,即忘记了上一场比赛

REGEXP_SUBSTR(s,'str1\s*=\s*\K([^|]+)')

\s*       = optional whitespace
\K        = reset start of match
([^|]+)   = any char but a | 

RegEx101

于 2021-03-11T12:28:48.217 回答