在 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>>>HERE>>>)]'.
【问题讨论】:
你需要转义[ 你必须避开像\[
和\]
这样的外部大括号。
是的 - 对不起。 \
必须在 c++ 字符串中转义为 \\
。所以最终的字符串应该看起来像\\[/([0-9]5)\\]
@Vera rind 没问题。是的,就可以了。谢谢!
【参考方案1】:
您需要双重转义 [
和 ]
正则表达式中表示 character classes 的特殊字符。正确的正则表达式声明将是
boost::regex e ("\\[/([0-9]5)\\]");
这是必要的,因为 C++ 编译器还使用反斜杠来转义像 \n
这样的实体,而正则表达式引擎使用反斜杠来转义特殊字符,以便将它们视为文字。因此,反斜杠加倍。当您需要匹配文字反斜杠时,您必须使用其中的 4 个(即\\\\
)。
【讨论】:
感谢您的解决方案和链接。我会用它作为参考。【参考方案2】:使用以下内容(转义 [
和 ]
,因为它们是正则表达式中的特殊字符,表示字符类):
\\[/([0-9]5)\\]
^^ ^^
【讨论】:
以上是关于在 C++ 中使用正则表达式查找 [/ 和 ] 之间的数字的主要内容,如果未能解决你的问题,请参考以下文章