Нужно регулярное выражение, чтобы соответствовать точное имя таблицы в исходном коде в Oracle 12cR1 - PullRequest
0 голосов
/ 24 октября 2018

Я использую 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

1 Ответ

0 голосов
/ 24 октября 2018

Я обычно использую это:

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

. Здесь вы найдете подробную информацию о Regex: https://stackoverflow.com/a/52441424/7998591

'i' для случая игнорирования, и вы можете опустить его, если хотите.

Демо для ваших данных

...