2016-04-15 13 views
0

Ich habe folgende Erklärung ab:Regex Spiel Statement

(({ dbo.Document.MimeType_ID in (select ID from MimeType where Name ='PDF')} Or { dbo.WorkflowItem.CurrentStateName not like 'On_Hold%'}) And ({ dbo.DocumentMetaData.Field_ID=74 And dbo.DocumentMetaData.FieldValue Not like '%test%'} And { dbo.Document.FileName='karan'})) 

Ich möchte 4 Aussagen zwischen {}

zB

dbo.Document.MimeType_ID in (select ID from MimeType where Name ='PDF') 
dbo.WorkflowItem.CurrentStateName not like 'On_Hold%' 
dbo.DocumentMetaData.Field_ID=74 And dbo.DocumentMetaData.FieldValue Not like '%test%' 
dbo.Document.FileName='karan' 
+2

ist es verschachtelte Muster? Ich schlage vor, Sie auch Parser verwenden – rock321987

+0

Nein, es keine verschachtelten Muster ist, tatsächlich seine Voraus Suchformel, jetzt habe ich Suche wiederherstellen möchte, meine einfache Anforderung ist, wie alle Aussagen erhalten zwischen {} –

+1

ist https://regex101.com/r/tQ9bY6/2 gut? – rock321987

Antwort

1

Diese Regex funktioniert (wenn es keine verschachtelten Muster)

\{\s*([^}]+)\s*\} 

C# -Code

string input = "(({ dbo.Document.MimeType_ID in (select ID from MimeType where Name ='PDF')} Or { dbo.WorkflowItem.CurrentStateName not like 'On_Hold%'}) And ({ dbo.DocumentMetaData.Field_ID=74 And dbo.DocumentMetaData.FieldValue Not like '%test%'} And { dbo.Document.FileName='karan'}))"; 
string pattern = "\\{\\s*([^}]+)\\s*\\}"; 
Regex rgx = new Regex(pattern); 

Match match = rgx.Match(input); 

while (match.Success) 
{ 
    Console.WriteLine(match.Groups[1].Value); 
    match = match.NextMatch(); 
} 

Ideone Demo