2017-01-14 4 views
-1

Ich mache einige Experimente mit regulären Ausdrücken und ich weiß nicht, warum die Regex nicht übereinstimmen.Was ist los mit diesem regulären Ausdruck

Zeichenkette ist eine Zeile aus einer Datei. Eine Linie, die übereinstimmen sollten, ist dies

["boxusers:settings/user[boxuser11]/name"] = "username", 

Die Zahl der boxuser und könnte der Wert unterschiedlich sein, also versuchte ich

einen regulären Ausdruck

Mein Code ist dies zu finden:

string user; 
string patternUser = "[\"boxusers:settings/user[boxuser\\d{2,}]/name\"] = \""; 
if (Regex.Match(line,patternUser).Success) 
    user = Regex.Replace(Regex.Replace(line, patternUser, String.Empty), ",*", String.Empty); 

Also ich denke, dass \ d {2,0} eine Zahl mit zwei Ziffern sein sollte und der Rest ist genau derselbe. Aber die Regex stimmt einfach nicht überein.

Was läuft falsch?

Antwort

2

Eckige Klammern haben in regulären Ausdrücken eine besondere Bedeutung. Sie müssen ihnen mit einem Backslash entkommen.

var line = @"[""boxusers:settings/user[boxuser11]/name""] = ""username"", "; 
string patternUser = @"\[""boxusers:settings/user\[boxuser\d{2,}\]/name""\] = """; 
Console.WriteLine(Regex.Match(line, patternUser).Success); 

Wenn Sie nicht wörtlich Strings verwenden möchten, müssen Sie zwei Schrägstriche verwenden, um jede Regex Metazeichen zu entkommen (die erste, die zweite zu entkommen).

+0

Danke, ich erinnere mich .... – tux007

+0

Ich denke, Flucht ist erforderlich für viele Sonderzeichen in regulären Ausdrücken wie., *, |, Da alle von ihnen eine besondere Bedeutung haben –