2016-08-23 4 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 жадный диапазон

Как я могу сопоставить строки с нуля до восьми заглавных букв в середине (т.е. между слэша)?

Я попытался regex : AAA/(?!(.*[a-z].*)[A-Z]{0,8})/AAA

Но это не соответствует ни одному из указанных выше строк.
(. Regex AAA/[A-Z]{0,8}/AAA делает матч выше строк, но он соответствует строчные буквы слишком ex: AAA/bb/AAA)

+1

Add Notepad ++ tag, это очень важно. –

ответ

6

Ваш оригинальный AAA/[A-Z]{0,8}/AAA был правильным, но у вас есть модификатор «чувствительно к регистру» регулярное выражение установить где-то за пределами регулярного выражения, так что вы совпадают строчные буквы, а также. (Вы проверили "Учитывать регистр" флажок в Notepad ++?)

Вы можете сделать регулярное выражение (или часть выражения) с учетом регистра с (?-i) конструкцией:

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

Демо: https://regex101.com/r/aS2iW8/1

+0

Да! это была проблема. Спасибо. – Dinushan

1

Вы можете сделать:

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

Теперь соответствует группе \1 бы получить вам, что в двух / с.

Demo

+0

hmm .. по какой-то причине это соответствует строкам типа «AAA/bb/AAA» (по крайней мере, в блокноте ++) – Dinushan

+0

Нет этого регулярного выражения cann't match 'AAA/bb/AAA' – anubhava

+0

@anubhava В некоторых случаях это возможно. Например. когда нечувствительный к регистру режим включен. –