在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
,即0
。
SELECT '10+5' REGEXP '10+5' as temp;
SELECT '10*5' REGEXP '10*5' as temp;
若要在正则表达式中使用特殊字符的文字实例,请在其前面加上两个反斜杠()字符。MySQL解析器解释其中一个反斜杠,正则表达式库解释另一个反斜杠。
在前两个语句中转义+
和*
将返回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
i.1
而不转义*
,下面类似的内容(第二个片段中的最后一个)返回false
。
SELECT '10*5' REGEXP '10*5' as temp;
它要求对*
进行转义。为什么?
发布于 2012-09-11 15:50:23
一个未转义的星号,如你所知,意思是“0或更多的前面的字符”,所以"1*5“意味着”任意数目的1s,后面跟着一个5“。
关键是来自医生的这个信息
A REGEXP pattern match succeeds if the pattern matches anywhere in the value being tested. (This differs from a LIKE pattern match, which succeeds only if the pattern matches the entire value.)
因此,"1*5“(”任意数目的1s,后面跟着一个5")将通过只看到"5“来匹配字符串"1*5”。"10*5“("1,后面跟着任意数量的0,后面跟着5")与字符串"10*5”不匹配,因为"*“字符会将它分开。
希望这能有所帮助。
https://stackoverflow.com/questions/12373245
复制相似问题