Группы и квантификаторы {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