Помогите составить регулярное выражение в php так, чтобы каждая буква из "к,о,л,е,с,о" могла быть использована 0 или 1 раз, то есть в массиве $slova должно найтись "колесо" и "оселок", а колосс не подходит, так как нет двух букв "с".
Как не меняю, оно ищет и колосс или ничего не ищет.
В массиве 10 тысяч слов, возможно есть более быстрый способ поиска, был бы благодарен, кроме foreach, пока все работает на нем, но хочу сравнить по скорости и удобности с регулярками.
reds, там просто есть двусмысленность с числами после обратного слеша.
Это обратные ссылки или символы в восьмеричном формате https://www.php.net/manual/ru/regexp.reference.bac...
Синтаксис \g1 вместо \1 поможет убрать двусмысленность.
VicTHOR, сохраняющие группы тут пустые. Так что там будет пустая строка, но тут важен сам факт участия в совпадении какой-то группы. Когда группа уже участвовала в совпадении, то условие (?!\g1) исключит повторное совпадение.
VicTHOR, трюк с пустыми сохраняющими группами почерпнул из книги "Регулярные выражения. Сборник рецептов" авторы Ян Гойвертс, Стивен Левитан.
Глава 5.7. Поиск близко расположенных слов.
Там в конце подробно описан механизм работы этого трюка с пустыми обратными ссылками.