我正在尝试编写一个正则表达式来匹配包含两个不同的十六进制数组的字符串,这些字符串的长度为4个字符,用连字符分隔。 e.g。
00AA-10F2
14ED-7F09
1A20-A55F
此表达式正常,
[0-9A-F]{4}-[0-9A-F]{4}
但我想知道是否有更简洁的方法来实现同样的目标。
我正在使用C ++ 11 std::regex
(目前处于默认/ ECMAScript模式),以防万一。
任何建议都会非常感激!
谢谢,
富
答案 0 :(得分:1)
不是真的。你可以编写像
这样的表达式([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 ++实现中的其他模式。