2015-04-07 51 views
0

我需要像字符串那样的“EWD-eb-AEW-97-QOW”的正则表达式。用字母和十六进制表示的正则表达式

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

我用:

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

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

回答

0

我会使用类似:

​​

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

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

组三字母,'-',两个十六进制字母和'-',然后做两次,然后是t又是三个字母。


使用Ruby的正则表达式\h延长关于:

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

2

\h不匹配2张十六进制数,使用这个表达式:

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

RegEx Demo

+1

太棒了!非常感谢! –

+0

\ h匹配1位十六进制数字?..我在这里丢失了一些东西.. https://regex101.com/r/mZ1aT2/3 –

+0

http://www.regular-expressions.info/shorthand.html - >更多速记字符类 - >最后一行是指“Ruby 1.9及更高版本有自己的版本\ h。它与一个十六进制数字匹配,就像[0-9a-fA-F]”..这是错误的? –

2

除了anubhava的答案..你可以在你的答案添加{2}出现为实现相同。

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

DEMO

+0

不,你不能' \ h'不代表十六进制值,它表示水平空白。使用'\ h'是模式中的一个致命缺陷,它与匹配目标字符串不匹配。 –

+0

In Ruby'\ h'表示十六进制数字..见更新演示 –

+0

http://regular-expressions.info/shorthand.html - >更多速记字符类 - >最后一行指的是''Ruby 1.9及更高版本他们自己的版本\ h。它匹配一个单一的十六进制数字,就像[0-9a-fA-F]“',仅供您参考.. –