增加正则表达式未知数量的var

时间:2012-12-14 23:01:02

标签: regex boost boost-regex

我有一个正则表达式的问题,需要一些帮助。我在mein .txt文件中有一些像这样的表达式:

19 = NAND (1, 19) 

正则表达式:http://rubular.com/r/U8rO09bvTO

通过这个正则表达式,我得到了数字的分隔匹配。 但现在我需要一个正则表达式,括号中包含未知数量的数字。

例如:

19 = NAND (1, 23, 13, 24)

match1:19,match2:1,match3:23,match4:13,match5:24

我不知道号码的数量。所以我需要括号中的最小2个数字的主表达式,直到一个未知的数字。

顺便说一句,我正在使用c ++。 @ Martjin你的第一个正则表达式非常有效,谢谢。 这是我的代码:

    boost::cmatch result;
    boost::regex matchNand ("([0-9]*) = NAND\\((.*?)\\)");
    boost::regex matchNumb ("(\\d+)");
    string cstring = "19 = NAND (1, 23, 13, 24)";
    boost::regex_search(cstring.c_str(), result, matchNand);
    cout << "NAND: " << result[1] << "=" << result[2] << endl;
    string str = result[2];
    boost::regex_search(str.c_str(), result, matchNumb);
    cout << "NUM: " << result[1] << "," << result[2]<< "," << result[3] << "," << result[4] << endl;

我的输出:         NAND:19 = 1,23,13,24         NUM:1 ,,,

所以我的新问题是我只找到第一个号码。 结果与此解决方案完全相反:http://rubular.com/r/nqXDSuBXjc

1 个答案:

答案 0 :(得分:1)

一个简单的(也许比一个正则表达式更清晰)是将它分成两个正则表达式。

首先运行一个正则表达式,将结果与参数分开: http://rubular.com/r/YkGdkkg4y3

([0-9]*) = NAND \((.*?)\)

然后执行一个匹配论证中所有数字的正则表达式:http://rubular.com/r/2vpSbZvz12

\d+

假设您正在使用Ruby,您可以使用函数scan执行多次匹配的正则表达式,如下所述:http://ruby-doc.org/core-1.9.3/String.html#method-i-scan

当然你可以使用带有scan函数的第二个正则表达式来获取该行中的所有数字,但我猜你要进一步扩展它,这就是这种方法何时会更有条理。