MySql(私は5.1.48を使用しています)では、次の正規表現はtrue
すなわちを返し1
ます。
SELECT '10-5' REGEXP '10-5' as temp;
SELECT '10/5' REGEXP '10/5' as temp;
SELECT '1*5' REGEXP '1*5' as temp;
ただし、次の式はfalse
ieを返し0
ます。
SELECT '10+5' REGEXP '10+5' as temp;
SELECT '10*5' REGEXP '10*5' as temp;
正規表現で特殊文字のリテラルインスタンスを使用するには、その前に2つの円記号(\)文字を付けます。MySQLパーサーはバックスラッシュの1つを解釈し、正規表現ライブラリはもう1つを解釈します。
エスケープする+
と*
、前の2つのステートメントで、true
つまり1
次のようになります。
SELECT '10+5' REGEXP '10\\+5' as temp;
SELECT '10*5' REGEXP '10\\*5' as temp;
この場合*
、次のステートメント(最初のスニペットの最後のステートメント)でエスケープする必要がないのはなぜですか?
SELECT '1*5' REGEXP '1*5' as temp;
true
つまり1
、エスケープせずに戻り*
、次の類似したもの(2番目のスニペットの最後のもの)はを返しますfalse
。
SELECT '10*5' REGEXP '10*5' as temp;
*
エスケープする必要があります。なんで?