sql >> データベース >  >> RDS >> Mysql

繰り返し文字のないMysql正規表現検索

    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}'
    


    1. 2つのテーブルmysql、1対多の関係を結合します

    2. mysqlまたはrailsでこれをどのように行いますか

    3. T-SQL開発者向けのヒントを含むTOP5MySQLDelete構文

    4. ZendDBがデータベース接続を管理する方法