Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Поиск группы символов в любом порядке без повторов
Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2012
Помог: 0 раз(а)
Никак не могу сообразить. Требуется регулярное выражение которое бы находило группу искомых символов в любом порядке в строке любой длины, как это делает выражение /[xyz]{3}/. Проблема в том, что символы не должны повторяться: т.е. может быть так .*(xyz).* или .*(yzx).* или .*(yxz).* . Сама длина группы искомых символов также может варьировать.
dcc0
Отправлено: 02 Сентября, 2014 - 12:09:51
Участник
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
У вас перестановки. Ради интереса перечитал руководство по preg_match, не нашел встроенного модификатора. Можно считать факториал числа элементов, например из массива и передавать в переменную, только код будет слишком большим.
Интересно, можно ли это сделать с помощью awk из консоли.
Мои ассерты проходит, но по соображениям сопровождаемости делать лучше двупроходным алгоритмом - сперва выбрать [xyz]{3}, потом отфильтровать, например, по count(array_unique(preg_split('~.~', $sMatch))), не равному количеству букв в наборе.
----- PostgreSQL DBA
dcc0
Отправлено: 02 Сентября, 2014 - 14:06:48
Участник
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Моя мысль была примерно такой. Но на n символов понадобится n циклов и n + неизвестно сколько проверок.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.