Группы и квантификаторы {m,n}

Можно ли использовать квантификаторы с группами?

Например. Я хочу сопоставить что-то вроде:

  • 11%
  • 09%
  • аа%
  • з.ы.%
  • g1%
  • 8b%...

Шаблон: 2 буквы или цифры (смешанные или нет) и%, заканчивающийся строкой...

<?php
echo preg_match('~^([a-z]+[0-9]+){2}%$~', 'a1%'); // 0, I expect 1.

Я знаю, этот пример не имеет особого смысла. Простой [list]{m,n} решил бы это. Как можно проще получить ответ.

2 ответа

Вы уверены, что можете применять квантификаторы к группам. Например, у меня есть строка:

HouseCatMouseDog

И у меня есть регулярное выражение:

(Mouse|Cat|Dog){n}

куда n это любое число. Вы можете играть вокруг изменения значения n здесь

Что касается вашего примера (да, [list]{m,n} было бы проще), это будет работать, только если есть алфавит или больше, а затем число или больше. Таким образом, только g1 будет соответствовать.

Вам не нужно использовать двухсимвольные классы, только один сделает вашу работу.

echo preg_match('~^([a-z0-9]{2})%$~', 'a1%'); 

Значение RegExp

^ => It will match at beggining of the string/line
(
    [a-z0-9] => Will match every single character that match a-z(abcdefghijklmnopqrstuvwxyz) class and 0-9(0123456789) class.
    {2} => rule above must be true 2 times
) => Capture block
% => that character must be matched after a-z and 0-9 classes
$ => end of string/line
Другие вопросы по тегам