如何应用 `REGEXP_SUBSTR` 从字符串中提取特定的子字符串?

How to apply `REGEXP_SUBSTR` to extract specific substring from string?

我有以下字符串 011/2020-PL00-70-31(它可能略有不同,例如 011/2020-PL00-70-3011/2020-PL00-70-310)。我需要从字符串中提取最后一个 - 之前的所有字符串。作为 011/2020-PL00-70-310REGEXP_SUBSTR 的结果,我只需要得到 011/2020-PL00-70,即没有最后 4 个符号(但在某些情况下可能没有 2 或 3 个符号)。

我是 PL 中的正则表达式的新手 SQL,很抱歉这个问题这么简单。

非常感谢。

在这种特殊情况下,我认为您过度考虑了使用正则表达式的解决方案。您的连字符始终是第三个连字符,因此您只需使用 INSTR 即可找到第三个连字符。在此处查看此查询:

SELECT SUBSTR(sample, 1, INSTR(sample, '-', 1, 3)-1) AS match
FROM sample_table;

我已将结果与 SQLFiddle 相关联 - http://sqlfiddle.com/#!4/c30207/7/0

您可以使用正则表达式捕获组 () 从模式中仅获取您需要的部分。

SELECT REGEXP_SUBSTR(sample, '^(.*)-\d+$',1,1,'',1) AS sample2
FROM sample_table
SAMPLE2
011/2020-PL00-70
011/2020-PL00-70
011/202-PL00-70

演示 db<>fiddle here

正则表达式模式测试here

您可以将尾随数字替换掉:

REGEXP_REPLACE(whatever, '(-[^-]+)$', '')

正则表达式捕获减号和任何后续的非减号字符([^-]+;或者您可以仅匹配数字:\d+)– if 它们位于字符串的末尾 ($),因此中间数字受到保护。