为什么这个匹配(它应该匹配 (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/