2010-12-21 21 views
0

Ich habe ein bisschen Probleme mit meiner Regex.C# Regex Problem

String a = @"{target=}jump"; 
String b = "continue"; 
String c = "jump"; 
String d = @"{target=intro}jump"; 
String e = "prev"; 
String f = @"{target=}choice"; 
String g = @"{target=intro}choice"; 
String h = "choice"; 
String i = "previous"; 
String j = @"{target=intro}continue"; 
String k = "cont"; 
String l = @"{target=}continue"; 
Regex regex = new Regex(@"(^{target=(\w.*)}(choice|jump))|(^[^.]*(continue|previous))"); 
var a_res = regex.IsMatch(a); 
var b_res = regex.IsMatch(b); 
var c_res = regex.IsMatch(c); 
var d_res = regex.IsMatch(d); 
var e_res = regex.IsMatch(e); 
var f_res = regex.IsMatch(f); 
var g_res = regex.IsMatch(g); 
var h_res = regex.IsMatch(h); 
var i_res = regex.IsMatch(i); 
var j_res = regex.IsMatch(j); 
var k_res = regex.IsMatch(k); 
var l_res = regex.IsMatch(l); 

Im Grunde, was ich brauche, ist eine Übereinstimmung zu erhalten, wenn Wahl oder Sprung vorhanden ist, dass es durch {target =} geht mit einem beliebigen Anzahl von Zeichen nach dem =. Und auch zu passen, wenn weiter oder vorher vorhanden sind, aber nur wenn sie von nichts weiterverfolgt werden.

also A = falsch, b = wahr, c = falsch, d = richtig, e = falsch, f = falsch, g = richtig, h = falsch, i = richtig, j = falsch, k = falsch und l = false,

mit meiner Regex oben bekomme ich richtiges Lesen für alles bar j und l.

Kann mir bitte jemand helfen?

+0

haben Sie einige Antworten gepostet, die Kommentare sein sollten. Ich denke, du kannst sie immer noch löschen und als Kommentar hinzufügen. Wenn ich die Antworten kommentiere, können Sie sie möglicherweise nicht löschen. –

+0

Eigentlich können Sie Ihre Antwort löschen, obwohl ich das Verfahren zum Löschen von Fragen mit dem Verfahren zum Löschen von Antworten verwirrend war. –

Antwort

1

Ich glaube, Sie

{target=(\w.*)} 

mit

{target=[^}]*} 

Dies ermöglicht eine beliebige Anzahl von nicht-} Zeichen nach dem "target =" ersetzt werden soll.

EDIT: Eigentlich könnten Sie bitte Ihre Bedeutung klären? Ich entnehme dem Kontext, dass

"A = falsch, b = wahr, c = falsch, d = wahr, e = falsch, f = falsch, g = wahr, h = falsch, i = wahr, j = falsch, k = falsch und l = falsch "

sind die erwarteten Werte (eher als tatsächliche .. Sie sollten dies explizit für mehr Klarheit erwähnen). Aber basierend auf Ihrer verbalen Beschreibung, l (Korrektur: a und f) sollte wahr sein, nicht falsch.

Ich ging auch auf eine "Fehler zu einem Zeitpunkt beheben" Basis. Meine Regex gibt immer noch wahr, obwohl es aufgrund Ihrer verbalen Beschreibung falsch sein sollte. Ich werde in Kürze eine weitere Bearbeitung vornehmen.

EDIT 2: Ich glaube, was Sie nach heißt

^({target=[^}]+}(choice|jump)|continue|previous) 

EDIT 3: Leider so viele Male zu bearbeiten, aber ich sollte erwähnen, dass die erste } nach dem = unter Annahme ist (obwohl eine gemeinsame und oft praktische). Eine umfassendere Testsuite würde anzeigen, ob

{target=}}choice 

eine Übereinstimmung sein sollte.

+0

passt das nicht auch 0 Vorkommen obwohl? – Shannow

+0

@Shannow 0 ist eine Nummer. Wenn Sie 0 verbieten möchten, müssen Sie dies wie in "alle nicht null Zeichen" angeben. –

0

Ähnlich wie Mitch Antwort, aber:

{target=[^}]+} 

Dies sollte mindestens 1 nicht} Zeichen entsprechen.