web-dev-qa-db-fra.com

Échapper à une barre oblique dans une expression régulière

Ma question est simple et concerne les expressions régulières. Devez-vous échapper à un slash avant / dans une expression régulière? Et comment vous y prendriez-vous?

93
Zerobu

Quel contexte/langue? Certaines langues utilisent / comme délimiteur de motif, alors oui, vous devez l’échapper, en fonction de la langue/du contexte. Vous y échappez en plaçant une barre oblique en arrière devant elle: \/ Pour certaines langues (comme PHP), vous pouvez utiliser d'autres caractères comme délimiteur et vous n'avez donc pas besoin de l'échapper. Mais autant que je sache, dans toutes les langues, la seule signification particulière du / _ est le séparateur de motif désigné.

79
Crayon Violent

Voici quelques options:

  • En Perl, vous pouvez choisir d'autres délimiteurs. Vous n'êtes pas limité à m//. Vous pouvez en choisir un autre, tel que m{}. Alors échapper n'est pas nécessaire. En fait, Damian Conway dans "Perl Best Practices" affirme que m{} Est le seul délimiteur alternatif qui devrait être utilisé, ce que renforce Perl :: Critic (sur CPAN). Bien que vous puissiez utiliser une variété de délimiteurs alternatifs, // Et {} Semblent être les plus clairs à déchiffrer par la suite. Toutefois, si l’un ou l’autre de ces choix entraîne une trop grande fuite, choisissez celui qui se prête le mieux à la lisibilité. Des exemples courants sont m(...), m[...] Et m!...!.

  • Dans les cas où vous ne pouvez pas ou préférez ne pas utiliser d'autres délimiteurs, vous pouvez échapper aux barres obliques par une barre oblique inversée: m/\/[^/]+$/ Par exemple (en utilisant un autre délimiteur qui pourrait devenir m{/[^/]+$}, plus clairement). Échapper à la barre oblique avec une barre oblique inversée est assez courant pour mériter un nom et une page wikipedia: Syndrome du cure-dent penchant . Dans les expressions régulières où il n'y a qu'un cas, échapper une barre oblique pourrait ne pas être considéré comme un obstacle à la lisibilité, mais si cela commençait à devenir incontrôlable, et si votre langue permettait des délimiteurs alternatifs, comme le ferait Perl, être la solution préférée.

35
DavidO

Utilisez la barre oblique inverse \ ou choisissez un autre délimiteur, c.-à-d. m#.\d# au lieu de /.\d/ "En Perl, vous pouvez remplacer le délimiteur d'expression régulière par presque n'importe quel caractère spécial si vous le précédez de la lettre m (pour la correspondance);"

9
Corey

Si le délimiteur est /, vous devrez vous échapper.

6
fvox