你能帮我简化下面的正则表达式吗:
(^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开头,那么应该没有匹配项。
谢谢,
发布于 2018-12-08 21:31:08
您可以使用RegEx的Subroutines来避免使用多个字符类:
\A0x([0-9a-f]{2})((?1))((?1))((?1))((?1))((?1))使用\G锚,你可以做得更短:
\A0x|\G(?!\A)[0-9a-f]{2}发布于 2018-12-08 21:37:54
此外,在我上面的评论中,你可以考虑使用(?(DEFINE)...)构造函数来验证和匹配:
(?x)(?(DEFINE)
(?<X>[0-9a-f]{2})
)
\A0x(?=(?&X){5})|\G(?!\A)(?&X)https://stackoverflow.com/questions/53682934
复制相似问题