Mysql 正则表达式怪癖

标签 mysql regex

为什么这个匹配(它应该匹配 (44[0-9]) 零次或多次)

mysql> SELECT "tampampam" REGEXP "(44[0-9])*$";
+----------------------------------+
| "tampampam" REGEXP "(44[0-9])*$" |
+----------------------------------+
|                                1 |
+----------------------------------+
1 row in set (0.00 sec)

这不匹配(它应该匹配 44 后跟 ([0-9]) 零次或多次

mysql> SELECT "44tampampam" REGEXP "44([0-9])*$";
+------------------------------------+
| "44tampampam" REGEXP "44([0-9])*$" |
+------------------------------------+
|                                  0 |
+------------------------------------+
1 row in set (0.00 sec)

最佳答案

嗯,这是一个非常奇怪的正则表达式。

对于第一种情况,(44[0-9])*$表示“匹配以44开头的字符串,然后是0到9的数字,任意次数直到字符串末尾”。由于“任意数字”都是可能的,因此匹配字符串“tampampam”。

对于第二种情况,44([0-9])*$ 表示“匹配 44,然后是 0 到 9 之间的任何数字(有大量回溯) ,零次或多次,直到字符串末尾”。但在 44 之后有“tampampam”。没有比赛到期。删除 $,你就会得到一个匹配项。

关于Mysql 正则表达式怪癖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29148044/

相关文章:

具有相同ID的mysql sum列

PHP 输出变量未出现

java - 引号内引号的命令解析

javascript - 匹配 <tr> 标签的正则表达式只匹配表中的第一个和最后一个 <tr>

javascript - Javascript 中带有条件的特定正则表达式

java - 如何让 mysql 在每次修改行操作时自动将列更新为当前时间戳?

php - 在循环内执行 SQL SELECT 查询

mysql - 唯一索引允许重复条目,以防其中一个条目为 NULL

ruby-on-rails - 将字符串中的正则表达式转换为 ruby​​ 中的正则表达式对象

c# - 如何验证不同格式的日期