web-dev-qa-db-fra.com

Que signifient «? I» et «? -I» dans l'expression régulière?

Quelqu'un pourrait-il expliquer ce que (?i) et (?-i) envelopper un mot en regex signifie?

(?i)test(?-i)

J'ai testé et cela correspond à test, TEST et teSt. Mais je n'ai jamais vu ça auparavant. Que fait le ? avant i signifie? J'ai vu ça ici .

51
Luccas

(?i) démarre le mode insensible à la casse

(?-i) désactive le mode insensible à la casse

Plus d'informations dans la section "Activation et désactivation des modes pour une partie seulement de l'expression régulière" de cette page :

Les saveurs regex modernes vous permettent d'appliquer des modificateurs à une partie seulement de l'expression régulière. Si vous insérez le modificateur (? Isme) au milieu de l'expression régulière, le modificateur s'applique uniquement à la partie de l'expression régulière à droite du modificateur. Vous pouvez désactiver les modes en les précédant d'un signe moins. Tous les modes après le signe moins seront désactivés. Par exemple. (? i-sm) active l'insensibilité à la casse et désactive le mode ligne unique et le mode multiligne.

Toutes les saveurs regex ne le supportent pas. JavaScript et Python appliquent tous les modificateurs de mode à l'expression régulière entière. Ils ne prennent pas en charge la syntaxe (? -Ismx), car désactiver une option est inutile lorsque les modificateurs de mode s'appliquent à l'ensemble régulier Toutes les options sont désactivées par défaut.

Vous pouvez rapidement tester comment la saveur regex que vous utilisez gère les modificateurs de mode. Le regex (? I) te (? - i) st doit correspondre à test et TEst, mais pas teST ou TEST.

70
gpojd

(?i) active le mode insensible à la casse , (?-i) le désactive.

Par exemple, si vous avez essayé (?i)te(?-i)st, il correspondrait à test, TEst, tEst, mais pas teST.

22
Mathletics

Tiré directement de Ruby docs.

Le délimiteur de fin pour une expression rationnelle peut être suivi d'une ou plusieurs options à une seule lettre qui contrôlent la façon dont le modèle peut correspondre.

/ pat/i - Ignorer la casse

/ pat/m - Traite une nouvelle ligne comme un caractère correspondant à.

/ pat/x - Ignore les espaces et les commentaires dans le modèle

/ pat/o -> Effectuer une seule interpolation # {}

i, m et x peuvent également être appliqués au niveau de la sous-expression avec la construction (? on-off), qui active les options et désactive les options désactivées pour l'expression entourée par les parenthèses.

5
gmaliar