/ / Regex s'échapper avec ou? - c #, regex

Regex échapper avec ou \? - c #, regex

Quelqu'un peut-il m'expliquer lors de l'utilisation d'expressions régulières lorsqu'une double barre oblique inverse ou une barre oblique simple doit être utilisée pour échapper à un caractère?

Beaucoup de références en ligne utilisent une simple barre oblique inverse et les testeurs de regex en ligne fonctionnent avec des barres obliques inverses simples, mais en pratique, je dois souvent utiliser une double barre oblique inverse pour échapper à un caractère.

Par exemple:

"SomeString."

Fonctionne dans un testeur de regex en ligne et correspond à "SomeString" suivi d'un point.

Cependant, dans la pratique, je dois utiliser une double évasion:

if (Regex.IsMatch(myString, "SomeString\."))

Réponses:

5 pour la réponse № 1

C # n'a pas de syntaxe spéciale pourconstruction d’expressions régulières, comme le font Perl, Ruby ou JavaScript. Il utilise plutôt un constructeur qui prend une chaîne. Cependant, les chaînes ont leur propre mécanisme d'échappement, car vous voulez pouvoir insérer des guillemets dans la chaîne. Ainsi, il y a deux niveaux d'évasion.

Donc, dans une expression régulière, w signifie la lettre "w", tandis que w signifie un caractère de mot. Cependant, si vous faites une chaîne "w", vous échappez au caractère "w", ce qui n’a aucun sens, car le caractère "w" n’est ni une citation ni une barre oblique inverse, "w" == "w". Ensuite, cette chaîne contenant uniquement "w" devientpassé au constructeur regexp, et vous finissez par correspondre à la lettre "w" au lieu de n'importe quel caractère de mot. Ainsi, pour passer la barre oblique inversée à l’expression rationnelle, vous devez insérer deux barres obliques inverses dans le littéral chaîne (\w): l'un sera supprimé lors de l'interprétation du littéral de chaîne, l'autre sera utilisé par l'expression régulière.

Lorsqu’on travaille directement avec des expressions régulières (comme sur la plupart des testeurs d’expression rationnelle en ligne ou lorsqu’on utilise des chaînes textuelles) @"..."), vous n'avez pas à vous soucier de lainterprétation des littéraux de chaîne, et vous écrivez toujours une seule barre oblique inversée (sauf lorsque vous souhaitez faire correspondre la barre oblique inversée elle-même, mais que vous espionnez ensuite la barre oblique inversée pour l’expression rationnelle et non pour la chaîne).


3 pour la réponse № 2

Est également un caractère d'échappement pour les littéraux de chaîne dans c #. Ainsi, le premier évite le second transmis à la méthode et le second échappe au. dans la regex.

Utilisation:

if (Regex.IsMatch(myString, @"SomeString."))

Si vous voulez éviter une double fuite.


2 pour la réponse № 3

Si vous utilisez un symbole textuel @(chaîne textuelle), vous n’avez plus besoin d’échapper à la barre oblique inverse.

if (Regex.IsMatch(myString, @"SomeString."))