2
我有字符串,例如可以是3D-F2-C9-A6-B3字节正则表达式有隔板
这是我的正则表达式,我已经通过在线测试仪的正则表达式验证它:
^([0-9A-Fa-f]{2}[-]){0,}$
问题是,示例字符串3D-F2-C9-A6-B3-4F
无效。我不得不在末尾添加一个减号,如3D-F2-C9-A6-B3-4F-
如何更改中间的分隔符必须设置但没有人在最后的正则表达式?
我有字符串,例如可以是3D-F2-C9-A6-B3字节正则表达式有隔板
这是我的正则表达式,我已经通过在线测试仪的正则表达式验证它:
^([0-9A-Fa-f]{2}[-]){0,}$
问题是,示例字符串3D-F2-C9-A6-B3-4F
无效。我不得不在末尾添加一个减号,如3D-F2-C9-A6-B3-4F-
如何更改中间的分隔符必须设置但没有人在最后的正则表达式?
,最好的办法就是把它打开一点:
^[0-9A-Fa-f]{2}(?:-[0-9A-Fa-f]{2})*$
详细:
^
- 字符串的开始[0-9A-Fa-f]{2}
- 2个字符从定义的集合(?:-[0-9A-Fa-f]{2})*
- 的
-
零个或更多序列 - 一个连字符[0-9A-Fa-f]{2}
- 从所定义的2个字符设定$
- 串的端部(更好的选择是\z
匹配非常结尾的字符串)var pattern = @"^[0-9A-Fa-f]{2}(?:-[0-9A-Fa-f]{2})*\z";
var input = "3D-F2-C9-A6-B3";
var matched = Regex.IsMatch(input, pattern); // = > True
通常,人们张贴的溶液等'^([0-9A发-F] {2} [ - ]){0,}在'[$'(注意了''? - ]')?通过这种方式,匹配变得非线性,它也允许'-'出现在字符串的末尾,并且在某些情况下导致性能较差并且字符串很长。重复像你这样的模式('[0-9A-Fa-f]')在这里不是什么大问题(你甚至可以使用'RegexOptions.IgnoreCase'和删除'AZ'来缩短它),否则只需动态地构建模式用重复块定义一个变量。 –