用于匹配多个组的正则表达式

Regular Expression to match multiple groups

本文关键字:正则表达式 用于      更新时间:2023-10-16

我正在尝试编写一个正则表达式来匹配包含两组不同十六进制数字的字符串,长度为 4 个字符,用连字符分隔。

例如

00AA-10F2
14ED-7F09
1A20-A55F

这个表达式工作正常,

[0-9A-F]{4}-[0-9A-F]{4}

但我想知道是否有更简洁的方式来实现同样的事情。

我正在使用 C++11 std::regex(当前处于默认/ECMAScript 模式(,以防万一。

任何建议将不胜感激!

谢谢

富。

不是真的。你可以写这样的表达式

([0-9A-F]{4}-?){2}

(-?[0-9A-F]{4}){2}

但前者也会匹配像00AA-10F2-00AA10F2-这样的字符串,后者也会匹配-00AA-10F2-00AA10F2。没有更短的方法来编写正则表达式[0-9A-F]{4}-[0-9A-F]{4}

但是,您可以使用简单的C++技巧,例如:

std::string subexpression("[0-9A-F]{4}");
std::regex regularExpression(subexpression + "-" + subexpression);

或者,默认 ECMAScript 模式以外的模式可以提供正则表达式语法,允许某些子表达式重复,但在C++实现中可能缺少支持其他模式。