如何转换此 pcre 正则表达式以用于 Oracle 的 REGEXP_SUBSTR?

How do I convert this pcre regex to be used with Oracle's REGEXP_SUBSTR?

我有这个 pcre 正则表达式,我想将其移植到 Oracle 支持的正则表达式:

^.*pdf_(\w+-\w+).*$

旨在匹配且仅匹配加粗的内容:

roundBox indent pdf_placement

pdf_grade

indent pdf_placement1 roundBox

Oracle 正则表达式语法中的等效表达式是什么?

编辑:

我尝试了 sln 在评论中的建议:

SELECT REGEXP_SUBSTR(class, '^.*pdf_(\w+(?:-\w+)*).*$') FROM ...

我得到的只是返回的整个值,而不仅仅是匹配项:

roundBox indent pdf_placement

而不是

placement

我最后的表达方式是:

pdf_(\w+(?-\w*)*)

完整的 SELECT 子句如下所示:

SELECT REGEXP_SUBSTR(class, 'pdf_(\w+(-\w*)*)', 1, 1, 'i', 1) FROM ...

您可以采取替换不需要的方法:

SQL> with t (txt) as (
  2  select 'roundBox indent pdf_placement' from dual union all
  3  select 'PDF_grade' from dual union all
  4  select 'indent pdf_placement1 roundBox' from dual
  5  ) -- end of sample data
  6  select regexp_replace(txt, '^.*pdf_(\w+).*$', '', 1, 0, 'i')
  7    from t;
REGEXP_REPLACE(TXT,'^.*PDF_(\W
--------------------------------------------------------------------------------
placement
grade
placement1

我使用参数 'i' 使其不区分大小写并且也可以使用大写字母 PDF。有需要的可以随意使用。