首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配字母数字码的正则表达式

匹配字母数字码的正则表达式
EN

Stack Overflow用户
提问于 2016-08-24 08:42:48
回答 2查看 119关注 0票数 1

我想要一个与以下模式相匹配的正则表达式

  • 第一字符字母数字不包括I,O,S,Z
  • 2-3字符字母数字
  • 这些BB,KA,JQ中只有4-5字符。

目前,我已经开发了这个模式。

代码语言:javascript
复制
[^I,O,S,Z,i,o,s,z][0-9A-Za-z]{2}[AA|TN|TP]{2}

但它正在考虑AI2AT,而它不应该这样做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-24 08:46:59

你可以用

代码语言:javascript
复制
/^[0-9A-HJ-NP-RT-Y][A-Z0-9]{2}(?:BB|KA|JQ)$/i

代码语言:javascript
复制
/^[0-9A-Ha-hJ-Nj-nP-Rp-rT-Yt-y][A-Z0-9]{2}(?:BB|KA|JQ)$/

regex演示

如果你能使用“看头”,你可以用

代码语言:javascript
复制
/^(?![IOSZiosz])[A-Za-z][A-Za-z0-9]{2}(?:BB|KA|JQ)$/

请参阅这个regex演示

当前的[^I,O,S,Z,i,o,s,z][0-9A-Za-z]{2}[AA|TN|TP]{2}表达式实际上不检查字符串开始/结束,[^I,O,S,Z,i,o,s,z]否定字符类匹配任何字符,但匹配I,O等,[AA|TN|TP]{2}字符类匹配A|TNP,两次匹配。

所以,

  • 您可以使用[0-9A-HJ-NP-RT-Y]来代替第一个否定字符类
  • 不要使用最后一个字符类,而是使用非捕获组(?:...)和交替运算符| (在[...]字符类中作为文字符号|处理)。
  • 不区分大小写的修饰符有助于“缩小”模式,但如果不能使用,则可以将小写字母与大写对应的字母加倍。
  • (?![IOSZiosz])负查找限制了通用字母数字[A-Za-z0-9]模式,使其无法匹配IioOSszZ
票数 2
EN

Stack Overflow用户

发布于 2016-08-24 08:51:59

试试这个:

代码语言:javascript
复制
(?!I,O,S,Z,i,o,s,z)[0-9A-Za-z][0-9A-Za-z]{2}(BB|KA|JQ){2}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39118469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档