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

Posted

技术标签:

【中文标题】在 C++ 中使用正则表达式查找 [/ 和 ] 之间的数字【英文标题】:Finding number between [/ and ] using regex in C++ 【发布时间】:2015-06-09 13:52:35 【问题描述】:

我想找到[/] 之间的数字(在本例中为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;
    

但是,我收到此错误:The error occurred while parsing the regular expression fragment: '/([0-9]5&gt;&gt;&gt;HERE&gt;&gt;&gt;)]'.

【问题讨论】:

你需要转义[ 你必须避开像\[\]这样的外部大括号。 是的 - 对不起。 \ 必须在 c++ 字符串中转义为 \\ 。所以最终的字符串应该看起来像\\[/([0-9]5)\\] @Vera rind 没问题。是的,就可以了。谢谢! 【参考方案1】:

您需要双重转义 [] 正则表达式中表示 character classes 的特殊字符。正确的正则表达式声明将是

boost::regex e ("\\[/([0-9]5)\\]");

这是必要的,因为 C++ 编译器还使用反斜杠来转义像 \n 这样的实体,而正则表达式引擎使用反斜杠来转义特殊字符,以便将它们视为文字。因此,反斜杠加倍。当您需要匹配文字反斜杠时,您必须使用其中的 4 个(即\\\\)。

【讨论】:

感谢您的解决方案和链接。我会用它作为参考。【参考方案2】:

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

\\[/([0-9]5)\\]
^^            ^^

【讨论】:

以上是关于在 C++ 中使用正则表达式查找 [/ 和 ] 之间的数字的主要内容,如果未能解决你的问题,请参考以下文章

什么正则表达式仅在 C++ 源文件中查找字符串

shell脚本之正则表达式

JavaScript - 正则表达之二

Java之正则表达式在字符串中查找中文

R语言之正则表达式

C++ 与正则表达式