【问题标题】:Does postgresql support lookbehind regexp?postgresql 是否支持后向正则表达式?
【发布时间】:2011-10-18 21:22:58
【问题描述】:

如果是,请提供一个后视示例或替代方法。

我正在尝试提取不带 '

的序列名称
select table_name,
       column_name,
       regexp_replace(substring(column_default from '''.*(?='')'),'''','','g') as sequence
FROM information_schema.columns 

【问题讨论】:

    标签: sql regex postgresql


    【解决方案1】:

    我上次检查的 sql 级别不支持它,但如果绝对必要,您可以使用 plperl 来解决这个限制。 (不过,繁重的正则表达式通常不属于数据库级别...)

    在您的特定示例中,请考虑改用否定类:[^'](根据需要转义)或non-greedy wildcard: .*?

    添加到您的具体问题,除非您实际手动创建序列,否则其名称将始终为:

    tablename_colname_seq
    

    同样 FWIW,如果您在应用程序中使用多个架构和搜索路径,则以下两个默认值具有不同的行为:

    nextval('foo'::regclass)  -- find foo once
    nextval('foo'::text)      -- find foo each time
    

    【讨论】:

    【解决方案2】:

    从 9.6 开始,它确实接受使用 (?<=re)、文档 here 的积极后视。

    【讨论】:

    • 澄清一下,它还接受使用(?<!re) 的负面回溯。例如select 'ABC' ~ '(?<!A)BC'; 返回f
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    相关资源
    最近更新 更多