2
SELECT 'AaYYY1231' REGEXP '[A-Z,0-9]+';

結果:

1

0を返すことを期待しているのに、なぜ1を返すのですか?'a'に一致するものはどこから見つかりますか?

4

1 に答える 1

3

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

「REGEXPでは、バイナリ文字列で使用する場合を除いて、大文字と小文字は区別されません。」

ドキュメントからの例:

mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
+----------------+-----------------------+
| 'a' REGEXP 'A' | 'a' REGEXP BINARY 'A' |
+----------------+-----------------------+
|              1 |                     0 |
+----------------+-----------------------+

さらに、それは貪欲ではないので、文字列全体が一致することを保証しません。上記の例を変更すると、次のようになります。

mysql> SELECT 'a' REGEXP BINARY '[A-Z0-9]+', 'Aa' REGEXP BINARY '[A-Z0-9]+';
+-------------------------------+--------------------------------+
| 'a' REGEXP BINARY '[A-Z0-9]+' | 'Aa' REGEXP BINARY '[A-Z0-9]+' |
+-------------------------------+--------------------------------+
|                             0 |                              1 |
+-------------------------------+--------------------------------+

これを説明するために、行の最初と最後にフラグを追加できます。

mysql> SELECT 'Aa' REGEXP BINARY '^[A-Z0-9]+$';
+----------------------------------+
| 'Aa' REGEXP BINARY '^[A-Z0-9]+$' |
+----------------------------------+
|                                0 |
+----------------------------------+

これはあなたが望むものの最終的な答えにつながります:

mysql> SELECT 'AaYYY1231' REGEXP BINARY '^[A-Z,0-9]+$';
+------------------------------------------+
| 'AaYYY1231' REGEXP BINARY '^[A-Z,0-9]+$' |
+------------------------------------------+
|                                        0 |
+------------------------------------------+
于 2013-01-17T01:40:00.513 に答える