您能帮我简化以下正则表达式吗?
(^0x)([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})
我要以下结果 如果字符串以0x开头,则匹配下一个表达式
0x010203040506
应该产生
- group 1: 01
- group 2: 02
- group 3: 03
- group 4: 04
- group 5: 05
- group 6: 06
如果字符串不是以0x开头,则应该没有匹配项。
谢谢
答案 0 :(得分:2)
您可以利用RegEx的Subroutines来避免使用多个字符类:
\A0x([0-9a-f]{2})((?1))((?1))((?1))((?1))((?1))
使用\G定位符,您可以走的更短:
\A0x|\G(?!\A)[0-9a-f]{2}
答案 1 :(得分:1)
此外,关于我的评论,您可以考虑使用(?(DEFINE)...)
构造函数来进行验证和匹配:
(?x)(?(DEFINE)
(?<X>[0-9a-f]{2})
)
\A0x(?=(?&X){5})|\G(?!\A)(?&X)