我在C ++ 11x模式下使用Ubuntu Linux 14.04和g ++ 4.9.2并尝试使用 std :: regex(我也可以使用boost regex)。
需要解析此字符串(为清楚起见,删除引号上的转义符):
" (1+MyFun("foo" )-"3" ) > (MyFun ("x2_1:3")+MyFun( "10.0.0.30:80/b3.new" ) - MyFun2("z:2")/OldMyFun("blue")
"
注意要求允许各种间距并避免MyFun的部分匹配(例如,不要与OldMyFun匹配("蓝色")。
我需要将未加引号 arg返回给字符串中的每一次MyFun, 不带 MyFun。对于上面的例子:
但这些都没有:
我有这个正则表达式,但它返回MyFun以及所需的(和引用的)args:
const std::string regexString="(MyFun\\()+(\"([^\"]*)\")\\)";
但只需要不带引号的arg。我正在使用std :: regex和std :: sregex_iterators。
#include <string>
#include <regex>
#include <iostream>
int main()
{
const std::string str="(1+MyFun(\"foo\" )-\"3\" ) > (MyFun (\"x2_1:3\")"
"+MyFun( \"10.0.0.30:80/b3.new\" ) - MyFun2(\"z:2\")/OldMyFun(\"blue\")";
const std::string regexString="MyFun\\s*\\(\\s*\"([^\"]+)\"\\s*\\)";
try
{
std::regex rgx(regexString);
std::sregex_iterator i(str.begin(), str.end(), rgx);
std::sregex_iterator e;
while (i != e)
{
std::cout<<i->str()<<std::endl;
++i;
}
}
catch(const std::exception& e)
{
std::cerr<<e.what()<<std::endl;
}
}
答案 0 :(得分:0)
MyFun\s*\(\s*"([^"]+)"\s*\)
或
MyFun\\s*\\(\\s*\"([^\"]+)\"\\s*\\)
试试这个。抓住捕获或组1.参见演示。