代码之家  ›  专栏  ›  技术社区  ›  ArtBajji

需要正则表达式来匹配Oracle 12cR1源代码中的精确表名

  •  0
  • ArtBajji  · 技术社区  · 7 年前

    我正在使用 甲骨文12cR1 . 我需要一个REGEX模式来精确匹配Oracle源代码中给定的表名(即,匹配的前面或后面不能有数字、字母或下划线符号)。

    测试代码:

    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
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Kaushik Nayak    7 年前

    我通常用这个:

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

    请在此处查找Regex的详细信息: https://stackoverflow.com/a/52441424/7998591

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

    Demo for your data