正则表达式与字母和十六进制

时间:2015-04-07 19:37:46

标签: ruby regex

我需要像EWD-eb-AEW-97-QOW一样的字符串regexp。

一般模式是: 3个大写字母,十六进制,3个大写字母,十六进制,3个大写字母。

我用:

/[A-Z]{3}-\h-[A-Z]{3}-\h-[A-Z]{3}/

但它不起作用。任何人都可以帮助解释它为什么不起作用吗?

3 个答案:

答案 0 :(得分:2)

\h不匹配2位十六进制数字,请使用此正则表达式:

/[A-Z]{3}-[A-F0-9]{2}-[A-Z]{3}-[A-F0-9]{2}-[A-Z]{3}/i

RegEx Demo

答案 1 :(得分:2)

除了anubhava的回答..您可以在答案中添加{2}次出现以实现相同目的。

/[A-Z]{3}-\h{2}-[A-Z]{3}-\h{2}-[A-Z]{3}/i

请参阅DEMO

答案 2 :(得分:0)

我会使用类似的东西:

/(?:[A-Z]{3}-[a-f0-9]{2}-){2}[A-Z]{3}/

https://www.regex101.com/r/aY5eF6/1

(?:[A-Z]{3}-[a-f0-9]{2}-)

将三个字母'-',两个十六进制字母和'-'分组,然后再进行两次,然后再重复三个字母。


关于使用Ruby的\h Regexp扩展:

我要小心在混合语言环境中使用\h之类的特殊字符,或者支持旧版Ruby的特殊字符。我们使用YAML来包含各种语言之间共享的模式,这样的事情会开启一个非常难以跟踪的bug。我建议使用[a-f0-9],除非你知道你永远不会遇到这个问题。