【问题标题】:Need Regular expression to match exact table name in source code in Oracle 12cR1需要正则表达式来匹配 Oracle 12cR1 源代码中的确切表名
【发布时间】:2019-03-29 00:48:06
【问题描述】:

我正在使用 Oracle 12cR1。我需要一个 REGEX 模式来与 Oracle 源代码中的给定表名完全匹配(即)该匹配项的前面或后面不得有数字、字母或下划线符号。

我创建了一个虚拟源代码并尝试了以下。它没有获取所有所需的记录。我错过了什么?是否有一个 REGEX 模式?

测试代码:

with names as (
select 'mytabname' tabname from dual union all
select 'mytabname1' from dual union all
select 'mytabname_' from dual union all
select 'mytabnameX' from dual union all
select '1mytabname' from dual union all
select '_mytabname' from dual union all
select 'Xmytabname' from dual union all
select '1mytabname_' from dual union all
select '1mytabnameX' from dual union all
select '_mytabname1' from dual union all
select 'Xmytabname1' from dual union all
select '_mytabnameX' from dual union all
select 'Xmytabname_' from dual union all
select '_mytabname_' from dual union all
select 'XmytabnameX' from dual union all
select '1mytabname1' from dual union all
select ' mytabname_' from dual union all
select '_mytabname ' from dual union all
select ' mytabname ' from dual union all
select ' mytabnameX' from dual union all
select 'Xmytabname ' from dual union all
select ' mytabname1' from dual union all
select '1mytabname ' from dual union all
select '.mytabname ' from dual union all
select ' mytabname.' from dual union all
select '.mytabname.' from dual union all
select '*mytabname' from dual union all
select ' mytabname*' from dual union all
select '*mytabname*' from dual union all
select 'defmytabnameabc' from dual)
select 'start'||tabname||'end' from names
where regexp_like(tabname, '[^a-zA-Z0-9_](mytabname)[^a-zA-Z0-9_]');

输出:

start mytabname end
start.mytabname end
start mytabname.end
start.mytabname.end
start mytabname*end
start*mytabname*end

输出缺少以下记录

startmytabnameend
start*mytabnameend

【问题讨论】:

    标签: regex oracle oracle12c regexp-like


    【解决方案1】:

    我一般用这个:

    SELECT *
      FROM user_source
     WHERE regexp_like(text, '(\W|^)' || 'employees' || '(\W|$)', 'i');
    

    在这里找到正则表达式的详细信息: https://stackoverflow.com/a/52441424/7998591

    'i' 用于忽略大小写,如果您愿意,可以省略。

    Demo for your data

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多