105 votes

Pouvez-vous faire juste une partie d'une expression régulière insensible à la casse?

J'ai vu beaucoup d'exemples de mise à l'ensemble d'une expression régulière insensible à la casse. Ce que je me demandais a juste une partie de l'expression être sensible à la casse.

Par exemple, disons que j'ai une chaîne de caractères comme ceci:

fooFOOfOoFoOBARBARbarbarbAr

Que faire si je veux correspondre à toutes les occurrences de "foo" quel que soit le cas, mais je ne veux correspondre à la majuscule de "BARRE"s?

La solution idéale serait d'avoir quelque chose qui fonctionne à travers les regex saveurs mais je suis intéressé à entendre la langue spécifique (Merci Espo)

Modifier

Le lien Espo fourni a été très utile. Il y a un bon exemple dans il y sur la façon de transformer les modificateurs sur et en dehors à l'intérieur de l'expression.

Pour mon exemple artificiel, je peux faire quelque chose comme ceci:

(?i)foo*(?-i)|BAR

ce qui rend le match de la casse, juste pour le foo partie du match.

Qui semblait fonctionner dans la plupart des regex implémentations à l'exception de Javascript, Python, et quelques autres (Espo).

Le plus gros que je me demandais à propos de (Perl, PHP, .NET) tout support inline changements de mode.

93voto

Espo Points 24318

Perl vous permet de rendre une partie de votre expression régulière insensible à la casse en utilisant le (?j':) motif de modificateur.

Moderne regex saveurs vous permettent d'appliquer des modificateurs à une partie seulement de l'expression régulière. Si vous insérez le modificateur (?ism) dans le milieu de la regex, le modificateur ne s'applique qu'à la partie de l'expression régulière à droite de la touche de modification. Vous pouvez désactiver les modes en les faisant précéder d'un signe moins. Tous les modes après le signe " - " s'éteint. E. g. (?i-sm) s'allume compte de la casse, et s'éteint à la fois unique ligne de mode et en mode multi-lignes.

Pas tous les regex saveurs de soutien. JavaScript et Python appliquer tous les mode des modificateurs pour l'ensemble de l'expression régulière. Ils ne supportent pas l' (?-ismx) de la syntaxe, depuis la désactivation d'une option est inutile lorsque le mode modificateurs s'appliquent à l'ensemble des expressions régulières. Toutes les options sont désactivées par défaut.

Vous pouvez tester rapidement la façon dont les regex saveur, vous êtes à l'aide des poignées mode de modificateurs. L'expression rationnelle (?i)te(?-i)st devrait correspondre à ce test et d'essai, mais pas de teST ou de l'examen.

Source

7voto

aku Points 54867

Malheureusement, la syntaxe comparaison insensible à la casse n'est pas commun. Dans .NET, vous pouvez utiliser RegexOptions.IgnoreCase drapeau ou ?je modificateur

6voto

akdom Points 6724

Quelle langue utilisez-vous? Un moyen standard pour ce faire serait quelque chose comme /([Ff][Oo]{2}|BAR)/ sensibilité à la casse, mais en Java, par exemple, il y a une sensibilité à la casse de modificateur (?i) ce qui rend tous les caractères à la droite de la casse et (?-i) quelles sont les forces de la sensibilité. Un exemple de Java regex modificateur peut être trouvé ici.

4voto

Kibbee Points 36474

Vous pouvez utiliser

(?:F|f)(?:O|o)(?:O|o)

L' ?: dans les crochets .Net signifie qu'il est non-capture, et juste utilisé pour regrouper les termes de la | du (ou des) déclaration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X