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

How to convert this regex to mysql posix

如果已经有答案请见谅

作为正则表达式的完全 n00b,我很难为这种情况获得好的正则表达式:

我需要确定一个字符串是否只包含字母,或者来自 MySQL table 字段的字母和数字……例如。只需获取 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,因此出现此错误

Got error 'repetition-operator operand invalid' from regexp

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

For 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] - 一个 hyphen/alpha 个字符,0+ 个 alnum/- 个字符,一个数字
    • | - 或
    • [0-9][-[:alnum:]]*[-[:alpha:]] - 一个数字,0+ alnum/- 个字符,hyphen/alpha 个字符
  • ) - 交替组结束
  • [-[:alnum:]]* - 0+ 个连字符或字母数字字符
  • $ - 字符串结尾。

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

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

^[-[:alpha:]]+$

这里,

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