2017-09-30 4 views
0

Je dois faire correspondre certains chiffres entre accolades dans une chaîne, mon expression ressemble à ceci: SNC{(\\\d*)}.
Après avoir appliqué des caractères d'échappement, je pensais que regex devrait se transformer en SNC\\\\{(\\\d*)\\\\}, mais l'inspecteur d'Intellij suggère que les barres obliques inversées avant la fermeture du crochet sont redondantes, donc SNC\\\\{(\\\d*)} est suffisant. Pourquoi ça marche?Le caractère d'échappement avant la fermeture de brascet est redondant

Répondre

2

Dans regex {m,n} est utilisé comme quantificateur représentant la quantité entre m et n (inclus). Si vous avez échappé d'abord { comme \{..} alors le moteur regex ne traitera pas le reste de cette sous-expression comme description du quantificateur, donc ce n'est plus spécial qui nous permet d'ignorer l'échappement pour } (bien que cela soit autorisé, ce qui signifie que votre code fonctionnera, mais comme vous le voyez, certains IDE le considèrent comme inutile et vous en avertissent).

BTW de même pour \[...] mais pas à \(...) - regex attend toujours ) être explicitement échappèrent si vous voulez le traiter comme littéral, puisque (...) est utilisé très souvent et ayant non échappés ) dans regex comme (\((...) ())) pourrait être très déroutant .