2016-08-23 2 views
0

String to be matched = "AAA/up to eight upper case letters/AAA" : ex1 : AAA/BB/AAA ex2 : AAA//AAA ex3: AAA/BBCCDDEEFF/AAA
Regex gamme gourmande

Comment puis-je correspondre à des chaînes avec zéro à huit lettres majuscules au milieu (i.e. entre les barres obliques)?

J'ai essayé regex : AAA/(?!(.*[a-z].*)[A-Z]{0,8})/AAA

Mais il ne correspond pas à l'une des chaînes ci-dessus.
(. Regex AAA/[A-Z]{0,8}/AAA fait ci-dessus correspondent des chaînes, mais il correspond à des lettres minuscules trop ex: AAA/bb/AAA)

+1

Ajouter Notepad ++ tag, c'est très important. –

Répondre

6

Votre AAA/[A-Z]{0,8}/AAA original était correct, mais vous avez « insensible à la casse » modificateur de regex défini quelque part en dehors du regex afin que vous correspondez des lettres minuscules ainsi. (Avez-vous cochez la case à cocher "Match case" dans Notepad ++?)

Vous pouvez faire la regex (ou une partie d'expression) sensible à la casse avec (?-i) construction:

(?-i)AAA\/[A-Z]{0,8}\/AAA 

Démo: https://regex101.com/r/aS2iW8/1

+0

Oui! c'était le problème. Merci – Dinushan

1

Vous pouvez faire:

^A{3}/([A-Z]{0,8})/A{3}$ 

Maintenant, le groupe apparié \1 voulez-vous obtenir ce qui est à l'intérieur de deux / s.

Demo

+0

hmm .. pour une raison quelconque, cela correspond à des chaînes comme "AAA/bb/AAA" (au moins dans le bloc-notes ++) – Dinushan

+0

Non cette regex ne peut pas correspondre 'AAA/bb/AAA' – anubhava

+0

@ ananhava Dans certains cas, il peut. Par exemple. lorsque le mode insensible à la casse est activé. –