如何匹配所有以 开头loockup.
和结尾_id
但没有前缀的字符串msg
?下面是一些例子:
lookup.asset_id -> should match
lookup.msg_id -> shouldn't match
lookup.whateverelse_id -> should match
我知道甲骨文不支持消极的后视(即(?<!)
)......所以我试图明确列举使用交替的可能性:
regexp_count('i_asset := lookup.asset_id;', 'lookup\.[^\(]+([^m]|m[^s]|ms[^g])_id') <> 0 then
dbms_output.put_line('match'); -- this matches as expected
end if;
regexp_count('i_msg := lookup.msg_id;', 'lookup\.[^\(]+([^m]|m[^s]|ms[^g])_id') <> 0 then
dbms_output.put_line('match'); -- this shouldn’t match
-- but it does like the previous example... why?
end if;
第二个regexp_count
表达式不应该匹配......但它确实喜欢第一个。我错过了什么吗?
编辑
在实际用例中,我有一个字符串,其中包含可能包含多个lookup.xxx_id
实例的 PL/SQL 代码:
declare
l_source_code varchar2(2048) := '
...
curry := lookup.curry_id(key_val => ''CHF'', key_type => ''asset_iso'');
asset : = lookup.asset_id(key_val => ''UBSN''); -- this is wrong since it does
-- not specify key_type
...
msg := lookup.msg_id(key_val => ''hello''); -- this is fine since msg_id does
-- not require key_type
';
...
end;
我需要确定是否至少有一个错误lookup
,即所有出现的地方,除了lookup.msg_id
,还必须指定key_type
参数。