这个正则表达式有什么问题,无法正常工作

本文关键字:常工作 工作 正则表达式 什么 问题 | 更新日期: 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"