regexp_substr 向后看 Oracle

regexp_substr with look behind Oracle

我使用 regexp_substr 来获取字符串中的最后 2 个字符,就像这样 A-XY XY

select regexp_substr('A-XY','([A-]+)?([A-Z]+)') 来自 dual

这找到了两个字符串,但我只需要显示 XY。 我试图通过在第一个 () 中向后看来解决它,例如 (?<=[A-]+) 但它不起作用,我只得到一个 A 作为输出。

您可以匹配整个子字符串,包括后视部分(并使用 $ 将其锚定到字符串的末尾),然后使用 [=] 的第 6 个参数仅提取捕获组12=]:

SELECT regexp_substr(
         'A-XY',
         'A-([A-Z]+)$',
         1,
         1,
         NULL,
         1
       ) AS last_characters
FROM   DUAL;

输出:

LAST_CHARACTERS
XY

db<>fiddle here