postgresql是否支持lookbehind regexp?

dan*_*car 9 regex sql postgresql

如果是,请提供一个关于lookbehind或替代的示例.

我正在尝试提取序列名称而不是'

select table_name,
       column_name,
       regexp_replace(substring(column_default from '''.*(?='')'),'''','','g') as sequence
FROM information_schema.columns 
Run Code Online (Sandbox Code Playgroud)

Den*_*rdy 8

最后我检查了它在sql级别不支持它,但如果绝对必要,你可以使用plperl来解决限制.(重复的regexing通常不属于DB级别,但......)

在您的特定示例中,请考虑使用否定类:( [^']根据需要转义它)或非贪婪的通配符:.*?.

除此之外,您需要手动创建序列,其名称将始终为:

tablename_colname_seq
Run Code Online (Sandbox Code Playgroud)

此外,如果您在应用中使用多个模式和搜索路径,则以下两个默认值具有不同的行为:FWIW:

nextval('foo'::regclass)  -- find foo once
nextval('foo'::text)      -- find foo each time
Run Code Online (Sandbox Code Playgroud)

  • 前瞻工作,看后面不是 (4认同)

Joã*_*cca 6

从9.6版开始,它确实接受使用此处的正向后备(?<=re)文档。

  • 澄清一下,它也接受使用 `(?&lt;!re)` 的负向后视。例如 `select 'ABC' ~ '(?&lt;!A)BC';` 返回 `f`。 (2认同)