У меня есть головоломка, где игрокам нужно сделать столько слов, сколько они могут, используя буквы существующего 9-буквенного слова. Скажем, у вас есть «водопад». Принимая письма и переставляя, вы можете сделать wafer, недостаток, левый ect.Regex найти слова из множества букв
В настоящее время, я использую выражение, которое выглядит, как это на моем списке слов:
^(?:([waterfall])(?!.*?1)){1,9}$
Но проблема в том, что это позволяет также письма, которые только появляются один раз, чтобы использовать дважды, как бесплатные (три Es) и tatter (три Ts).
На данный момент я просто повторяю свой список слов и подсчитываю буквы, убедившись, что предлагаемое слово не содержит более высокое количество на письмо, чем мое исходное слово. Но это кажется немного утомительным, и мое чувство кишки говорит мне, что должно быть возможным гарантировать, что выражение фактически использует только каждую букву один раз (или дважды, как L, если оно находится в начале слова дважды).
Я просмотрел документацию, но для меня это довольно греческий вопрос, и мне было интересно, есть ли у прекрасных укладчиков предложение.
Только для пояснения: '[водопад]' не ищет слова 'водопад', а вместо этого допускает одну букву класса символов. Его можно даже переписать как '[aeflrtw]' и разрешить те же слова (это, к сожалению, не решает вашу проблему: =)) То, что вы ищете, называется ** перестановкой **. – Jan
Какой диалект regex вы используете? – bwoebi
Я не думаю, что регулярное выражение подходит для этого - вам нужно будет проверить правильное количество каждой буквы в отдельном окне, например ['^ (?! (. * W) {2}) (?! (. * а) {3}) (?! (. * т) {2}) (?! (. * е) {2}) (?! (. * г) {2}) (?! (. * f) {2}) (?! (. * l) {3}) [waterfl] + $ '] (https://regex101.com/r/fW3rK4/1) для вашего примера. –