如何将此正则表达式转换为mysql posix

时间:2016-10-20 09:24:10

标签: mysql regex posix

如果已有答案,请原谅我。

作为一个带有正则表达式的总n00b,我很难在这个场景中获得良好的正则表达式:

我需要查找一个字符串是否只包含MySQL表字段中的字母,字母和数字......例如。只需获取MET-KL2531910并获得没有数字的MET-IHLPOUJ(因此不包括MET-KL2531910)。

过了一段时间,想出了这些:

对于MET-KL2531910

REGEXP '^(?=.*[-a-zA-Z])(?=.*[0-9])[-A-z0-9]+$'

对于MET-IHLPOUJ

REGEXP '^(?=.*[-A-z])[-A-z]+$'

但是,由于MySQL使用POSIX,因此会出现此错误

  

从regexp

获得错误'重复 - 运算符操作数无效'

任何人都可以将我的正则表达式转换为POSIX正则表达式。

1 个答案:

答案 0 :(得分:0)

  

对于MET-KL2531910
  REGEXP '^(?=.*[-a-zA-Z])(?=.*[0-9])[-A-z0-9]+$'

您可以使用

^[-[:alnum:]]*([-[:alpha:]][-[:alnum:]]*[0-9]|[0-9][-[:alnum:]]*[-[:alpha:]])[-[:alnum:]]*$

<强>详情:

  • ^ - 字符串开头
  • [-[:alnum:]]* - 0+连字符或字母数字字符
  • ( - 另一组:
    • [-[:alpha:]][-[:alnum:]]*[0-9] - 连字符/字母字符,0 + alnum / -字符,数字
    • | - 或
    • [0-9][-[:alnum:]]*[-[:alpha:]] - 一个数字,0 + alnum / -字符,连字符/ alpha字符
  • ) - 交替小组结束
  • [-[:alnum:]]* - 0+连字符或字母数字字符
  • $ - 字符串结束。
  

对于MET-IHLPOUJ   REGEXP '^(?=.*[-A-z])[-A-z]+$'

在这里,你根本不需要前瞻,因为你只匹配你需要的东西,使用

^[-[:alpha:]]+$

在这里,

  • ^ - 匹配字符串的开头
  • [-[:alpha:]]+ - 匹配1个或多个-或字母(= alpha字符)
  • $ - 字符串结束。