use*_*910 1 regex oracle plsql regexp-substr
我想用分号分隔的字符串分成PL/SQL的部分.只要字符串中没有圆括号,它就可以正常使用REGEXP_SUBSTR.
例:
select REGEXP_SUBSTR('A;B;C','[^(";")]+',1,1),
REGEXP_SUBSTR('A;B;C','[^(";")]+',1,2),
REGEXP_SUBSTR('A;B;C','[^(";")]+',1,3)
from dual;
Run Code Online (Sandbox Code Playgroud)
预期的结果是:ABC
A; B(1); C的结果应该是AB(1)C,但我得到的是:AB 1
select REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,1),
REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,2),
REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,3)
from dual;
Run Code Online (Sandbox Code Playgroud)
这意味着'('被检测为分隔符,但我不明白这种行为.有人可以开导我吗?
[]是一个多语言正则表达式语法,它表示"用于指定匹配列表的括号表达式,该匹配列表应与列表中表示的任何一个表达式匹配.非匹配列表表达式以抑扬符号(^)开头,并指定与任何字符匹配的列表,除了列表中表示的表达式."
例如
select REGEXP_SUBSTR('"A";"B(1)";"C"','[^";"]+',1,1)
from dual;
Run Code Online (Sandbox Code Playgroud)
将返回A B(1) C其中[^";"]+认为"或;作为分隔符
同样,在您的示例中, [^(";")]+将"OR ;OR (OR )视为与您期望的分隔符.
因此,对于您的预期输出,您可以尝试
select REGEXP_SUBSTR('A;B(1);C','[^;]+',1,1),
REGEXP_SUBSTR('A;B(1);C','[^;]+',1,2),
REGEXP_SUBSTR('A;B(1);C','[^;]+',1,3)
from dual;
Run Code Online (Sandbox Code Playgroud)