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;
ただし、次の式はfalseieを返し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;
*エスケープする必要があります。なんで?