2017-02-13 6 views
0

私のクエリ:しないのはなぜ正規表現のMySQLでは、この作品?

SELECT * FROM `tblforummessages` 
WHERE `FMMessage` REGEXP '^[a-zA-Z0-9 :,.!?éáőúöüóűíÉÁŐÚÖÜÓŰÍ()\t\n\r\-\"\„]{9,}$' 

私のテキストは次のとおりです。

「親愛なるマリエッタは、血液債務が合計 (13個)のプール、およびすべてのサウナ(4) を発券することをお知らせしたいと思いあなたが使用することができます。私は日曜日 除く任意の日は、12月23日、2009年」まで使用することができます血液債務者のチケットにあなたの注意を引きます

オンラインバリデータは、このテキストは、この表現のために渡したが、それは私が

CAST(`FMMessage` AS CHAR CHARACTER SET utf8) COLLATE utf8_general_ci 

が、didntのヘルプを使用しようとしたSQL で作業をいけないと述べました。

+0

あなたの正規表現は、私のクエリをブロックし、しかし、私\は「ので、すべての害、それは二重引用符をエスケープしない、とあなたは右の持っている、\ –

+0

あなたの正規表現を台無しにすることができれば?二重引用符で囲まれた文字列で走っているクエリである」が含まれていどちらも、私はそれを行うことができる方法よりも、(「および」)タイプでフィルタリングする必要がありますか?わからない –

+0

'」' OKですが、た '-'ブラケット式の終わりになる。そしてなければなりませんUNESCAP。空白わかりません。[。!N \トン\)-ZA-Z0-9 :,éáőúöüóűíÉÁŐÚÖÜÓŰÍ(\ R」「 - ]^'試してみてくださいどちらか{9} $' –

答えて

0

MySQLはREGEXPにマルチバイト文字をサポートしていません。

CHAR_LENGTH(FMMessage) >= 9を使用し、全体のFMMessageも傷つける最低9つの文字をチェックします。 REGEXPの残りの部分はそれをやろうとするものは不明です。あなたは、テキスト内のすべての通常のウェブスター可能な文字を持っていますが、いくつかの(すべてではない)他のヨーロッパのテキストを除外するように見えます。アンゴルがあるため、二重のではないとしても、いくつかのドイツ語、許可されています。符号化を仮定

は、UTF-8(またはutf8mb4)正規表現が|によって分離さ2-および4文字の16進ペアの長い文字列がある場合、おそらく

HEX(FMMessage) REGEXP '...' 

を実行することも可能です。正規表現全体では約300文字の長となります。

関連する問題