Группировка в Regex - PullRequest
       2

Группировка в Regex

1 голос
/ 26 июня 2010

Я пытаюсь найти совпадение в регулярном выражении.

Он должен соответствовать строке символов следующих форматов:

Начните с буквы C или H, следуя 6 символам. (Всего 7 символов) Начните с KK и следуйте 8 символам. (Всего 10 символов)

Поле ограничено 10 набранными символами. У меня есть следующее:

(((C|H).{6})|(KK.{8}))

Это соответствует KK + 8 просто отлично. Сбой на С + 5 просто отлично. Это успешно на C + 6 просто отлично. Однако это удастся на C + 7, C + 8 и C + 9.

Я предполагаю, что моя группировка неверна, кто-нибудь может указать на мою ошибку?

Это Regex со вкусом .NET, и я использую Regex.IsMatch, чтобы определить, соответствует ли поле моему регулярному выражению.

Ответы [ 4 ]

2 голосов
/ 26 июня 2010

Вам необходимо привязать начало (^) и конец ($) строки:

^([CH].{6}|KK.{8})$

Я также обрезал ненужные скобки и изменил (C|H) на класс символов , чтобы улучшить читаемость.

1 голос
/ 26 июня 2010

Вам необходимо добавить начало и конец строки якоря :

^(((C|H).{6})|(KK.{8}))$
1 голос
/ 26 июня 2010

Вы хотите захватить что-нибудь из шаблона? Если нет, я бы попробовал это:

^(KK..|C|H).{6}$
0 голосов
/ 26 июня 2010

Мне нравится, что Марк Байерс лучше всех отвечает с этой модификацией (проверено на .NET):

^[CH].{6}$|^KK.{8}$

Оригинал даст ложное совпадение для значений с более чем 6 символами после C или H.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...