我已阅读到默认情况下C ++使用ES规范创建正则表达式对象。
以下正则表达式将在javascript中工作,并且匹配任何用不转义的方括号定界的内容:
std::regex (R"((?<=\[)(.*?)(?=\]))");
但是在C ++中抛出未处理的异常。
怎么了?
答案 0 :(得分:0)
首先,即使具有默认的正则表达式风格,您也不能在C ++ os.open
模式中使用后退,因为它基于的ECMAScript规范早于您在{{3} },并且长度不受限制。
MSVC C ++正则表达式ECMAScript风格对特殊字符转义的要求更高:std::regex
字符必须始终被转义。
要在两个未转义的方括号中提取可能包含转义序列的方括号,您可以使用
]
请参见may use lookbehinds。 注意:它不支持嵌套的未转义方括号。
详细信息
std::regex reg(R"((?:^|[^\\])(?:\\{2})*\[([^\][\\]*(?:\\[\s\S][^\][\\]*)*)\])");
-非捕获组(?:^|[^\\])
-零个或多个重复的双反斜杠(?:\\{2})*
-一个\[
字符[
-第1组:
([^\][\\]*(?:\\[\s\S][^\]\[\\]*)*)
-除[^\][\\]*
,]
和[
以外的零个或多个字符\
-的零次或多次重复
(?:\\[\s\S][^\][\\]*)*
-一个\\[\s\S]
字符,后跟任意字符\
-除[^\][\\]*
,]
和[
以外的零个或多个字符\
-一个\]
字符。请参见regex demo:
]