匹配第二个字符正则表达式mysql

时间:2018-04-20 14:54:16

标签: mysql regex

我正在观看这个mysql课程,其中给出了以下示例:

SELECT Name, Continent, Population FROM Country WHERE Name LIKE '_%a' ORDER BY Name;

他们说'_a%'会匹配Name列中第二个字符为a的所有字符串。我在Ubuntu上使用MariaDB服务器10.0.34,在我的例子中,结果完全不同。相反,它会显示Name列中以a结尾的所有字符串。知道为什么会这样,存在差异吗? 感谢。

1 个答案:

答案 0 :(得分:0)

嗯。几点。

1)那些不是正则表达式,那些是LIKE比较。 (是的,是的,to-may-toh,tah-mah-toh,我知道。)但我们可以在我们的术语中精确,并避免混淆和混淆。

2)'_%a''_a%' 显着不同,正如您自己的观察所揭示的那样

  • _下划线匹配任何一个字符
  • %百分比匹配零,一个或多个任何字符
  • a匹配字符'a'

所以

  • LIKE '_a%'匹配任何单个字符,后跟“a”,后跟任意数量的(零个,一个或多个)字符

  • LIKE '_%a'匹配任何单个字符,后跟任意数量的(零个,一个或多个)任何字符,并以'a'结尾

作为示范:

  SELECT 'name'  LIKE '_a%'    -- true   - at least two chars, second char is a 
       , 'name'  LIKE '_%a'    -- false  - at least two chars, last char is a 

       , 'name'  LIKE '_e%'    -- false  - at least two chars, second char is e
       , 'name'  LIKE '_%e'    -- true   - at least two chars, last char is e

这些是LIKE比较。要使用正则表达式执行等效操作,请执行以下操作:

  SELECT 'name'  REGEXP '^.a'     -- at least two chars, second char is a 
       , 'name'  REGEXP '^..*a$'  -- at least two chars, last char is a 

       , 'name'  RLIKE  '^.e'     -- at least two chars, second char is e
       , 'name'  RLIKE  '^..*e$'  -- at least two chars, last char is e