首页 > 解决方案 > MySQL中两个看似相似的正则表达式之间的区别 - 相同的输出

问题描述

我一直在尝试自学 MySQL,并且想知道是否有人可以解释使用正则表达式元字符“*”和“?”之间的区别。我正在使用的书将它们都描述为“匹配 (0) 或它前面的字符串的一个实例”。我尝试使用这两种方法,同时在我创建的练习表中寻找相同的东西并得到完全相同的输出,所以如果一个操作员应该是贪婪的而另一个不是,它看起来并不总是这样每张桌子。

编辑 1:我包含了我从“*”获得的输出的屏幕截图,显示它与“ax*”形式的语句匹配。

编辑 2:regex101.com 没有将 MySQL 列为“风味”,当我尝试在那里对 Alexandra 执行“al*”时,它表示任何风味都不匹配。MySQL Workbench 将 Alexandra 作为输出之一返回的事实是否是 MySQL 特有的,不适用于任何其他语言?

标签: mysqlsqlregex

解决方案


它们并不完全相同。 "*"意思是“0个或更多”。 "?"表示“0 或 1”,如“可选”。所以,给定“ax*b”和“ax?b”:

  • 两者都不会匹配“a”
  • 两者都将匹配“ab”
  • 两者都将匹配“axb”
  • 只有第一个会匹配“axxb”或“axxxxxxb”

推荐阅读