Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Sa 11.04.15 14:39 
Hey @ll,

ich code momentan in VS 2015 mit der C# 6 Preview. Kann es sein, dass sich Regex und Stringinterpolation nicht vertragen?
Wenn ich so prüfe, erhalte ich true:
ausblenden C#-Quelltext
1:
Regex.IsMatch(text, @"\[" + Consts.REGEX_ALLOWED_NAME + @"\]")					

aber so erhalte ich false:
ausblenden C#-Quelltext
1:
Regex.IsMatch(text, @"\[\{Consts.REGEX_ALLOWED_NAME}\]")					

Ich vermute, das liegt an dem @. Dadurch erkennt er \{ nicht als Escapesequenz sondern als einfachen string, stimmts?
Kann man da mogeln, dass es trotzdem mit Stringinterpolation geht, oder muss ich bei meinem workaround bleiben?

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Sa 11.04.15 15:35 
Das mit dem @ ist eben ein verbatim-string - es gibt keine Escapesequenzen außer "" für quote. Das ist nicht nur praktisch für Regex, sondern z.B. auch für Pfade in denen Backslashes vorkommen.

Du kannst natürlich immer noch reguläre Literale verwenden, wenn du die passenden Zeichen (hier die Backslashes) escapest. Ungefähr so:

ausblenden C#-Quelltext
1:
Regex.IsMatch(text, "\\[\{Consts.REGEX_ALLOWED_NAME}\\]")					

Für diesen Beitrag haben gedankt: C#
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Sa 11.04.15 15:58 
Jop genau das wollte ich eigentlich vermeiden :mrgreen:

Aber so wie es aussieht geht es wohl nicht anderes.
Vielen Dank.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler