В C# я пытаюсь написать регулярное выражение, которое найдет все операторы go
, которые являются единственным оператором в строке, а не сразу предшествует оператору use $(trop)
.Non-greedy negative lookbehind
Я довольно близко - нахожу все операторы go
, но я не могу это исправить - это поиск первого (как указано ниже «НЕ поймать этот»), но я не могу сделайте отрицательный lookbehind работать правильно. Может ли кто-нибудь помочь мне с тем, что я делаю неправильно?
(?<goStatement>^(\s{0,})go(\s{0,})$)(?<useTrop>(?<!(^\s{0,}use \(trop\)\s{0,}$)))`
Вот текст Я ищу:
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
Никто из того, что у вас есть здесь '' C#, это выглядит как SQL Server T-SQL. Кроме того, если ваш вопрос касается регулярных выражений, я бы пометил сообщение с 'regex', чтобы иметь более высокий шанс получить необходимую вам помощь. – gmiley
Также нет необходимости указывать язык в теме. Вы должны это проверить: http://stackoverflow.com/help/how-to-ask –
Ребята, я не думаю, что это его код. Я думаю, что это пример, который он пытается разобрать. – Icemanind