Expression régulière pour permettre la barre oblique inverse en C#
Quelqu'un peut-il me fournir des regex pour la validation de la chaîne qui ne devrait pas autoriser les caractères spéciaux à l'exception de la barre oblique inverse. J'ai essayé
var regexItem = new Regex("^[a-zA-Z0-9\\\ ]*$");
Mais il ne semble pas fonctionner
"ne semble pas fonctionner"? Que fait-il que vous ne vous attendez pas?
OriginalL'auteur Suhaib | 2013-02-01
Vous devez vous connecter pour publier un commentaire.
Barres obliques inverses doivent être échappés dans les expressions régulières - et ils aussi doivent être échappés en C#, sauf si vous utilisez verbatim les littéraux de chaîne. Donc, soit de ces travaux:
À la fois de ces de s'assurer que la chaîne de caractères contenu est transmis à la
Regex
constructeur:La
Regex
code verrez alors la double barre oblique et de la traiter comme "j'ai vraiment envie de faire correspondre le caractère barre oblique inverse."Fondamentalement, vous avez toujours besoin de faire la distinction entre "le contenu de la chaîne que vous souhaitez passer le moteur d'expressions régulières" et "la chaîne de caractères littérale de la représentation dans le code source". (Cela est vrai non seulement pour les expressions régulières, bien sûr. Le débogueur ne pas l'aider à s'évader dans la Montre de windows etc.)
EDIT: Maintenant que la question a été modifiée pour afficher que vous avait à l'origine trois barres obliques inverses, c'est tout simplement pas valable en C#. Je suspect vous étiez visant à "une chaîne de caractères avec trois barres obliques inverses dans l'", qui serait l'un de ces:
... mais vous n'avez pas besoin de s'échapper de l'espace autant que l'expression régulière.
Le code que ont montré dans la question compilé avant que vous l'avez édité. (Quand j'ai répondu à la question, la question a montré deux barres obliques inverses. Pas dans le code de style, et je comprends que le markdown avait trois barres obliques inverses, mais j'ai été de répondre à la question, j'ai vu 🙂
J'ai simplement la mise en forme du code. Veuillez vous référer à la source de la révision. Les trois barres obliques inverses ont été là depuis le début.
Pour une raison quelconque, la question semblait qu'il n'avait que deux barres obliques inverses dans le début. Le troisième seulement révélé correctement lors de la mise en forme.
Oui, j'ai éditer mon commentaire. Ils étaient présents dans le markdown, mais je répondais à la question affichée 🙂
OriginalL'auteur Jon Skeet
Vous avez besoin soit d'échappement double (une fois pour le C# et une fois pour le moteur d'expressions régulières):
Ou vous pouvez utiliser le verbatim chaîne de caractéristique de C# (notez le @):
Dans un verbatim de la chaîne, la barre oblique inverse n'est pas interprétée comme le démarrage d'une séquence d'échappement, donc vous avez juste besoin de s'échapper une fois pour le moteur d'expressions régulières.
Je suppose que votre code ne compile pas. Il devrait dire quelque chose le long des lignes de "non reconnu séquence d'échappement".
La raison pour cela est que vous avez trois antislash suivi d'un espace. Les deux premières barres obliques inverses sont interprétés comme une séquence d'échappement représentant une barre oblique inverse, mais la troisième barre oblique inverse est interprété comme le démarrage d'une séquence d'échappement avec un espace comme le deuxième personnage. Une séquence d'échappement n'existe pas, conduisant à l'erreur.
OriginalL'auteur Daniel Hilgarth
Vous avez pour échapper à la
\
pour les regex ainsi que le C# string en ajoutant 4\s
pour faire correspondre un unique\
.OriginalL'auteur Naveed S