如果已有答案,请原谅我。
作为一个带有正则表达式的总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正则表达式。
答案 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字符)$
- 字符串结束。