2016-06-10 18 views
0

Wenn ich den folgenden regulären Ausdruck haben:Regular Expression für Ordnerpfad

c:\\Users\\.*?\\AppData\\.*?\.exe 

wird es passen:

C:\Users\jftuga\AppData\test.exe 
C:\Users\jftuga\AppData\Local\test.exe 

Wie kann ich die RE ändern, so dass Spiele nur den ersten Eintrag und nicht Unterverzeichnisse ebenso?

Ich bin mit C# und .NET Framework 4 - mit RegexOptions.IgnoreCase

+1

Ihr Muster entweder Ihren Tests nicht überein Saiten. Das Muster beginnt mit "c" (Kleinbuchstaben), aber die Strings beginnen mit "C" (Großbuchstaben) – user2023861

+0

Es tut. Ich habe die Frage aktualisiert und hinzugefügt RegexOptions.IgnoreCase – jftuga

Antwort

3

eine Zeichenklasse verwenden, die für \ aussieht:

c:\\Users\\.*?\\AppData\\[^\\]*?\.exe 

Play with it here

+0

Also wird im Allgemeinen die Negation Klausel immer vor dem, was Sie versuchen zu entsprechen gehen? Auch warum sollte es keine geben? vor dem *? Das liegt daran, dass die Negation (außer bei \ – jftuga

+1

) allem entspricht ("default"). Das ganze '[^ \\] *?' Sagt, dass keine oder mehrere Zeichen übereinstimmen, die keine Backslashes sind. Der Grund, warum Sie kein '.' vor dem' *? ''Wollen, ist, weil ein' .' mit jedem Zeichen übereinstimmt, einschließlich Backslashes. In meinem Muster gibt es nach dem 'AppData \\' -Teil nichts, das mit einem Backslash übereinstimmt. (Erlaubt Ihr Dateisystem auch Schrägstriche?) – user2023861