我正在尝试编写一个正则表达式来匹配包含两组不同的十六进制数字的字符串,长度为 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++ 实现中可能缺乏对其他模式的支持。
关于c++ - 匹配多个组的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47199323/