2017-08-17 79 views
3

我需要建立应适用于以下正则表达式:在C#的.NET具体的正则表达式

(有效期1 - 4块(分隔以“/”),其正好包含4个字符是十六进制数字)

Valid example 1: 3F00/FA41/FA12/B12F 
Valid example 2: 4F0T 
Valid example 3: FFFF/FF21 

Invalid example 1: 34BF/
Invalid example 2: 45FB2 
Invalid example 3: 4B5S/BD45 BA56 
Invalid example 4: FF02/B200 
... 

我只是无法弄清楚。这就是我现在所拥有的:

1: ([0-9A-F]{4})(\/ \1){1,3}|[0-9A-F]{4} 
2: [0-9A-F]{4} \/ [0-9A-F]{4} \/ [0-9A-F]{4} \/ [0-9A-F]{4}|[0-9A-F]{4} \/ [0-9A-F]{4} \/ [0-9A-F]{4}|[0-9A-F]{4} \/ [0-9A-F]{4}|[0-9A-F]{4} 

第二个很丑,两个都不行!

+1

你第二行是无效 –

+5

在4FOT的 'T' 是不是十六进制无论是。 :-) – Mithrandir

+0

@SamvelPetrosov,固定感谢 –

回答

4

我建议

^[0-9A-F]{4}(\/ [0-9A-F]{4}){0,3}$ 

模式:

^     - string start 
[0-9A-F]{4}   - 4 hex digits 
(\/ [0-9A-F]{4}){0,3} - up to 3 more 4 digits groups 
$      - string end 
+2

这允许超过4个块,这将是无效的 –

+1

@Mr。敬酒:如果我们想要'4'块; '{,3}'应该用来代替'*' –

+0

现在它工作得很好,谢谢! –

1

我觉得这可能会奏效,如果输入由行定行:

^([0-9A-F]{4})(\/ [0-9A-F]{4}){0,3}$ 
+0

如果块包含不同的字符不起作用: FFFF/FFFF =有效; 2222/1111 =无效 –

+0

删除反向引用,那么它应该工作。抱歉忘了删除它。 – Mithrandir

3

这应该做的伎俩:

^[\dA-F]{4}(\/ [\dA-F]{4}){0,3}$ 

它的第一个块匹配(4个十六进制字符)然后可选地匹配由/分隔的0-3个后续块。