Я работаю с цифровыми строками длиной от 4 до 8 цифр в диапазоне от 0001 до 99999999. Примеры:
Мне нужно проверить, может ли числовая строка быть сформирована из определенного набор. Думайте об этом как о мешочке для скрэббла с разными персонажами. В наборе содержится:
- 2 раза 0 (00)
- 4 раза 1 (1111)
- 3 раза 2 (222)
- 2 раза 3 (33)
- 3 раза 4 (444)
- 5 раз по 5 (55555)
- 2 раза по 6 (66)
- 5 раз по 7 (77777)
2 раза по 8 (88)
- 2 раза по 9 (99)
С помощью этого определенного набора цифр строка 0010 не может быть сформирована, поскольку в ней слишком много 1 нуля: нужно 3, но набор предоставляет только 2. Результат должен быть: false.Напротив, строка 90204394 может быть сформирована, поскольку определенный набор содержит достаточное количество каждой цифры. Это соответствует параметрам; желаемый результат: true.
Я решил выполнить проверку с помощью регулярного выражения, потому что оно вернет либо true, либо false, что в данном случае идеально. У меня получилось следующее:
Код: Выделить всё
preg_match('/(0{0,2}1{0,4}2{0,3}3{0,2}4{0,3}5{0,5}6{0,2}7{0,5}8{0,2}9{0,2})/', $string);
К сожалению, я получаю результат, что каждая проверенная строка выдает true, даже если она явно не может быть сформирована; например 08228282 (поскольку он содержит одну 8 и одну 2 слишком много).
Что мне здесь не хватает?
Подробнее здесь:
https://stackoverflow.com/questions/790 ... racter-set