In C#, ich versuche, einen regulären Ausdruck zu schreiben, die alle go
-Anweisungen finden, die die einzige Anweisung in der Zeile sind, und nicht unmittelbar von einer use $(trop)
-Anweisung vorangestellt.Nicht-gierige negative Lookbehind
Ich bin ziemlich nah - es findet alle go
Aussagen, aber ich bin nicht in der Lage, es richtig zu machen - es ist das Finden der ersten (wie unten mit "Fange das nicht"), aber ich kann nicht Machen Sie das negative Lookbehind richtig funktionieren. Kann mir jemand helfen, was ich falsch mache?
(?<goStatement>^(\s{0,})go(\s{0,})$)(?<useTrop>(?<!(^\s{0,}use \(trop\)\s{0,}$)))`
Hier ist der Text, den ich bin auf der Suche:
set noexec off
:setvar trop devtip
:setvar trop_wf_tracking trop_workflow_tracking
:setvar trop_wf trop_wf
-- Information - to set this script to only run once change stop_if_applied to 1.
:setvar stop_if_applied 1
-- Do NOT catch this one
use $(trop)
go
if $(stop_if_applied) = 1 and exists (select * from $(trop).dbo.DATABASE_VERSION where DB_SCRIPT_NUMBER = 20656) begin
select 'This db script has already been run. If it is required to run again change the variable stop_if_applied to 0. Disabling all further commands on the connection.'
,* from $(trop).dbo.DATABASE_VERSION
where DB_SCRIPT_NUMBER = 20656
set noexec on
return
end
-- DO catch this one ----------
go
-- ------------------------------------------------------------------------------
set xact_abort on
begin transaction
select * from $(trop).dbo.DATABASE_VERSION where DB_SCRIPT_NUMBER = 20656;
/* Insert your code here */
select * from dbo.SECURITY_RIGHT
-- DO catch this one ----------
go
/* End of your code here */
-- DO catch this one ----------
go
if not exists (select * from $(trop).dbo.DATABASE_VERSION where DB_SCRIPT_NUMBER = 20656)
insert into $(trop).dbo.DATABASE_VERSION (DB_SCRIPT_NUMBER, COMMENT)
values (20656, 'comment goes here');
select * from $(trop).dbo.DATABASE_VERSION where DB_SCRIPT_NUMBER = 20656;
commit
Nichts von dem was Sie hier haben, ist 'C#', es sieht aus wie SQL Server T-SQL. Wenn es sich bei Ihrer Frage um reguläre Ausdrücke handelt, würde ich den Beitrag mit "regex" kennzeichnen, um eine höhere Chance zu haben, die benötigte Hilfe zu erhalten. – gmiley
Es ist auch nicht erforderlich, die Sprache im Betreff anzugeben. Sie sollten dies überprüfen: http://stackoverflow.com/help/how-to-ask –
Jungs, ich glaube nicht, dass dies sein Code ist. Ich denke, das ist das Beispiel, das er zu analysieren versucht. – Icemanind