2012-12-14 48 views
1

我有一個正則表達式的問題,需要一些幫助。我有炒麪.txt文件的一些表達這樣的:Boost正則表達式未知數var

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

一個簡單的(也許比一個正則表達式更清晰)是將其分成兩個正則表達式。

首先運行,從你的論點將您的結果的正則表達式: 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函數來獲得該行的所有數字,但是我猜你會擴展它,這就是當這種方法稍微多一點時結構化的。

+0

感謝您的幫助,現在我有一個新問題,你可以看到它上面 –

+0

我不熟悉C++,但這裏也許有一些幫助: 函數regex_search似乎只搜索一次正則表達式,它會將每個組'(..)'存儲在結果數組中。由於我們的正則表達式只有一個組,它只會填充'result [0]'。 如何獲得多個匹配在這裏描述:http://stackoverflow.com/questions/3122344/boost-c-regex-how-to-get-multiple-matches –

+0

我現在看到,該文檔也有一個例子如何在示例部分執行多個匹配:http://www.boost.org/doc/libs/1_52_0/libs/regex/doc/html/boost_regex/ref/regex_search.html –