这个正则表达式有什么问题,无法正常工作
本文关键字:常工作 工作 正则表达式 什么 问题 | 更新日期: 2023-09-27 18:33:19
我的查询在我的预言机中工作正常,但是当我将其添加到我的预言机命令中时,在 [A-Z] 和 ''1''3 处出现错误,说无法识别的字符。我想我需要在什么地方使用@来使其正确,但我不知道在哪里?
*我的查询以查看没有用户名的触发器的定义:还删除以 ALTER TRIGGER 开头的行。
OracleCommand Command = new OracleCommand(@"SELECT regexp_replace(dbms_metadata.get_ddl('TRIGGER','" + triggernames + "'),'(CREATE OR REPLACE TRIGGER )("[A-Z]+"'.)(.+)(ALTER TRIGGER .+)',''1'3', 1, 0, 'n')FROM dual", connection))
结果:
CREATE OR REPLACE TRIGGER "USER"."EMP"
BEFORE INSERT OR UPDATE
of salary
on employee
for each row
declare
v_error VARCHAR2(20);
begin
if :new.salary > 10
then
v_error:=:old.first_name||' cannot have that much!';
raise_application_error(-20999,v_error);
end if;
end;
ALTER TRIGGER "USER"."EMP" ENABLE
预期成果:
CREATE OR REPLACE TRIGGER "EMP"
BEFORE INSERT OR UPDATE
of salary
on employee
for each row
declare
v_error VARCHAR2(20);
begin
if :new.salary > 10
then
v_error:=:old.first_name||' cannot have that much!';
raise_application_error(-20999,v_error);
end if;
end;
@ 不会为你做所有的转义。您需要用"''"转义 [A-Z] 周围的引号。
与''1''3相同,"''"说它是一个转义序列,你真正指的是字面上的"''"。
例如:
OracleCommand Command = new OracleCommand(@"SELECT regexp_replace(dbms_metadata.get_ddl('TRIGGER','" + triggernames + "'),'(CREATE OR REPLACE TRIGGER )('"[A-Z]+'"'.)(.+)(ALTER TRIGGER .+)','''1''3', 1, 0, 'n')FROM dual", conn1))
或者,如果要使用第二个"@",则需要使用引号-转义-序列(双")
例如:
@"SELECT regexp_replace(dbms_metadata.get_ddl('TRIGGER','" + triggernames + @"'),'(CREATE OR REPLACE TRIGGER )(""[A-Z]+""'.)(.+)(ALTER TRIGGER .+)',''1'3', 1, 0, 'n')FROM dual"