0

在 MySql(我使用的是 5.1.48)中,以下正则表达式返回trueie 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;

要在正则表达式中使用特殊字符的文字实例,请在其前面加上两个反斜杠 (\) 字符。MySQL 解析器解释其中一个反斜杠,而正则表达式库解释另一个。

转义+and*在前面两个语句中返回trueie1如下。

SELECT '10+5' REGEXP '10\\+5' as temp;
SELECT '10*5' REGEXP '10\\*5' as temp;

如果是这种情况,那么为什么*在以下语句(第一个片段中的最后一个)中不需要转义?

SELECT '1*5' REGEXP '1*5' as temp;

它返回trueie1而不转义*,并且以下类似的内容(第二个片段中的最后一个)返回false.

SELECT '10*5' REGEXP '10*5' as temp;

它需要*逃脱。为什么?

4

1 回答 1

2

如您所知,未转义的星号表示“前面的字符的零个或多个”,因此“1 * 5”表示“任意数量的 1,后跟 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”(“任意数量的 1,后跟 5”)将通过仅看到“5”来匹配字符串“1*5”。“10*5”(“1,后跟任意数量的 0,后跟 5”)与字符串“10*5”不匹配,因为“*”字符将其分解。

希望有帮助。

于 2012-09-11T15:50:23.363 回答