如何简单地使用此正则表达式?

时间:2018-12-08 13:21:14

标签: regex preg-match regex-group regex-greedy

您能帮我简化以下正则表达式吗?

(^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开头,则应该没有匹配项。

谢谢

2 个答案:

答案 0 :(得分:2)

您可以利用RegEx的Subroutines来避免使用多个字符类:

\A0x([0-9a-f]{2})((?1))((?1))((?1))((?1))((?1))

Example

使用\G定位符,您可以走的更短:

\A0x|\G(?!\A)[0-9a-f]{2}

Example

答案 1 :(得分:1)

此外,关于我的评论,您可以考虑使用(?(DEFINE)...)构造函数来进行验证和匹配:

(?x)(?(DEFINE)
    (?<X>[0-9a-f]{2})
)
\A0x(?=(?&X){5})|\G(?!\A)(?&X)

请参见live demo here