【发布时间】:2018-05-22 12:44:33
【问题描述】:
我正在尝试使用 Oracle 的 REGEXP_SUBSTR 来选择字符串中的字段。
例子:
this,,,is,,,an,,,example
解决方案:
DECLARE
field1 VARCHAR2(4000);
field2 VARCHAR2(4000);
field3 VARCHAR2(4000);
field4 VARCHAR2(4000);
separator VARCHAR2(300) := ',,,';
lineToParse VARCHAR2(4000) := 'this,,,is,,,an,,,example';
BEGIN
SELECT REGEXP_SUBSTR(lineToParse, '[^' || separator || ']+', 1, 1) AS part_1, REGEXP_SUBSTR(lineToParse, '[^' || separator || ']+', 1, 2) AS part_2, REGEXP_SUBSTR(lineToParse, '[^' || separator || ']+', 1, 3) AS part_3, REGEXP_SUBSTR(lineToParse, '[^' || separator || ']+', 1, 4) AS part_4
INTO field1, field2, field3, field4
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('Field 1: ' || field1);
DBMS_OUTPUT.PUT_LINE('Field 2: ' || field2);
DBMS_OUTPUT.PUT_LINE('Field 3: ' || field3);
DBMS_OUTPUT.PUT_LINE('Field 4: ' || field4);
END;
这非常适合上面的行,生成:
Field 1: this
Field 2: is
Field 3: an
Field 4: example
但是对于下面的行,它没有
this,,,is, a perfectly fine,,,new,,, line
这是因为第二个捕获组应该是:“是,完全没问题” 但最终成为“是”。
输出是:
Field 1: this
Field 2: is
Field 3: a perfectly fine
Field 4: new
原因是我使用的正则表达式:
[^,,,]+
正在捕获 ^ 后面的任何字符而不是序列。
如何调整我的正则表达式以便捕获整个序列?
这需要与 Oracle 11g 兼容。
【问题讨论】:
标签: regex oracle sequence regexp-substr