将Javascript正则表达式模式转换为C++std::regex的规则

Rules to convert a Javascript Regular Expression pattern to C++ std::regex?

本文关键字:regex 规则 C++std Javascript 正则表达式 模式 转换      更新时间:2023-09-26

我总是被正则表达式模式弄糊涂,不仅是在javascript、c#和c++等语言之间,即使是一种语言,我也很难记住每次尝试使用它的时间。

我有一个javascipt正则表达式:

    var reg = new RegExp(/^.*sdp'":'"(.*)'",.*$/);

如果我把它转换成c++std::regex,它应该是什么:

    std::regex rgx("/^.*sdp'":'"(.*)'",.*$/"); // is this correct?

有规则可以转换吗?感谢

我不确定JavaScript正则表达式为什么要转义":我不认为这是一个需要转义的特殊字符(但我不完全确定)。如果正则表达式中的引号需要转义,则需要对引号进行转义,因为在使用普通字符串时,引号被认为是字符串的末尾和反斜杠:

std::regex rgx("/^.*sdp'''":'''"(.*)'''",.*$/");

由于这几乎是不可读的,C++11有原始字符串文字:

std::regex rgx(R"(/^.*sdp'":'"(.*)'",.*$/)");

假设正则表达式不需要对引号字符进行转义,则只需要对字符串进行转义,即,您确实只需要使用

std::regex rgx("/^.*sdp'":'"(.*)'",.*$/");

这个字符串是一个例子,如果你想使用原始字符串文字,你就不能使用简单的原始字符串文字。因为它包括终止原始字符串文字的序列")"。你可以选择一些字符以不同的方式开始和终止原始字符串文字:

std::regex rgx(R"abc(/^.*sdp":"(.*)",.*$/)abc");