首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何简化这个正则表达式?

如何简化这个正则表达式?
EN

Stack Overflow用户
提问于 2018-12-08 21:21:14
回答 2查看 70关注 0票数 1

你能帮我简化下面的正则表达式吗:

代码语言:javascript
运行
复制
(^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开头,则它与下一个表达式匹配

代码语言:javascript
运行
复制
0x010203040506

应该产生

代码语言:javascript
运行
复制
- group 1: 01

- group 2: 02

- group 3: 03

- group 4: 04

- group 5: 05

- group 6: 06

如果字符串不是以0x开头,那么应该没有匹配项。

谢谢,

EN

回答 2

Stack Overflow用户

发布于 2018-12-08 21:31:08

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

代码语言:javascript
运行
复制
\A0x([0-9a-f]{2})((?1))((?1))((?1))((?1))((?1))

Example

使用\G锚,你可以做得更短:

代码语言:javascript
运行
复制
\A0x|\G(?!\A)[0-9a-f]{2}

Example

票数 2
EN

Stack Overflow用户

发布于 2018-12-08 21:37:54

此外,在我上面的评论中,你可以考虑使用(?(DEFINE)...)构造函数来验证和匹配:

代码语言:javascript
运行
复制
(?x)(?(DEFINE)
    (?<X>[0-9a-f]{2})
)
\A0x(?=(?&X){5})|\G(?!\A)(?&X)

请参阅live demo here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53682934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档