2015-04-07 81 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]「',僅供您參考.. –