首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySql中的正则表达式

MySql中的正则表达式
EN

Stack Overflow用户
提问于 2012-09-11 15:33:22
回答 1查看 84关注 0票数 0

在MySql (我使用的是5.1.48)中,以下正则表达式返回true,即1

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
SELECT '10+5' REGEXP '10+5' as temp;
SELECT '10*5' REGEXP '10*5' as temp;

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

在前两个语句中转义+*将返回true,即1,如下所示。

代码语言:javascript
运行
复制
SELECT '10+5' REGEXP '10\\+5' as temp;
SELECT '10*5' REGEXP '10\\*5' as temp;

如果是这样的话,为什么下面的语句中的* (第一个片段中的最后一个语句)中的不需要来转义?

代码语言:javascript
运行
复制
SELECT '1*5' REGEXP '1*5' as temp;

它返回true i.1而不转义*,下面类似的内容(第二个片段中的最后一个)返回false

代码语言:javascript
运行
复制
SELECT '10*5' REGEXP '10*5' as temp;

它要求对*进行转义。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-11 15:50:23

一个未转义的星号,如你所知,意思是“0或更多的前面的字符”,所以"1*5“意味着”任意数目的1s,后面跟着一个5“。

关键是来自医生的这个信息

代码语言:javascript
运行
复制
 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”不匹配,因为"*“字符会将它分开。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12373245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档