MySQLは逆参照キャプチャグループをサポートしていないため、(\w).*\1
の一般的なソリューション 動作しないでしょう。これは、与えられたソリューションはすべての可能なdoubleを列挙する必要があることを意味します。さらに、私が知る限り、後方参照は先読みまたは後読みでは無効であり、先読みおよび後読みはMySQLではサポートされていません。
ただし、これを2つの式に分割して、次のクエリを使用できます。
SELECT * FROM words
WHERE word REGEXP '^[SEPIAN]{1,6}$'
AND NOT word REGEXP 'S.*?S|E.*?E|P.*?P|I.*?I|A.*?A|N.*?N'
あまりきれいではありませんが、機能し、かなり効率的であるはずです。
繰り返される文字の設定制限をサポートするには、2次式に次のパターンを使用します。
A(.*?A){X,}
ここでA
あなたのキャラクターであり、X
許可される回数です。
したがって、別のN
を追加する場合 文字列にSEPIANN
(合計2つのN
s)、クエリは次のようになります:
SELECT * FROM words
WHERE word REGEXP '^[SEPIAN]{1,7}$'
AND NOT word REGEXP 'S.*?S|E.*?E|P.*?P|I.*?I|A.*?A|N(.*?N){2}'