繁体   English   中英

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

[英]How to convert this regex to mysql 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正则表达式。

适用于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] - 连字符/ alpha字符,0 + alnum / -字符,数字
    • | - 要么
    • [0-9][-[:alnum:]]*[-[:alpha:]] - 一个数字,0 + alnum / - chars,连字符/ alpha char
  • ) - 交替组的结束
  • [-[:alnum:]]* - 0+连字符或字母数字字符
  • $ - 结束字符串。

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

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

^[-[:alpha:]]+$

这里,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM