C++ 在C+中使用正则表达式查找介于[]和]之间的数字+;

C++ 在C+中使用正则表达式查找介于[]和]之间的数字+;,c++,regex,boost,C++,Regex,Boost,我想找到介于[/和]之间的数字(本例中为12345) 我写过这样的代码: float num; string line = "A111[/12345]"; boost::regex e ("[/([0-9]{5})]"); boost::smatch match; if (boost::regex_search(line, match, e)) { std::string s1(match[1].first, match[1].second); n

我想找到介于
[/
]
之间的数字(本例中为
12345

我写过这样的代码:

float num;
string line = "A111[/12345]";
boost::regex e ("[/([0-9]{5})]");
boost::smatch match;
    if (boost::regex_search(line, match, e))
    {
        std::string s1(match[1].first, match[1].second);
        num = boost::lexical_cast<float>(s1); //convert to float
        cout << num << endl;
    }
float-num;
字符串line=“A111[/12345]”;
boost::正则表达式e(“[/([0-9]{5})]”;
小比赛;
if(boost::regex_搜索(行、匹配、e))
{
std::字符串s1(匹配[1]。第一,匹配[1]。第二);
num=boost::lexical_cast(s1);//转换为float

cout您需要对regex中表示特殊字符的
[
]
进行双重转义。正确的regex声明将是

boost::regex e ("\\[/([0-9]{5})\\]");
<>这是必要的,因为C++编译器还使用反斜杠来逃避像<代码> \n>代码>之类的实体,ReGEX引擎使用反斜杠来逃避特殊字符,这样它们就被处理成文字。因此,反斜杠加倍。当你需要匹配一个文字反斜杠时,你必须使用其中的4个(即:代码> \\\/Cord>)。.

使用以下内容(转义
[
]
,因为它们是正则表达式中表示字符类的特殊字符):


你需要逃出[你必须逃离外部括号,比如<代码> \ [< /代码>和<代码> \>代码>。-抱歉-“代码> >代码>必须在C++字符串中被转出到<代码> \\/COD>。所以最后的字符串应该像<代码> \[/([09] { 5 })]
@Vera rind没问题。是的,可以。谢谢!谢谢你的解决方案和链接。我会把它作为参考。
\\[/([0-9]{5})\\]
^^            ^^