2011-05-26 105 views
5

經過天的黑客和閱讀的,我曾與升壓轉換器的正則表達式引擎沒有運氣,希望有人在這裏可以提供幫助。提振正則表達式捕獲組

我要搶第一場在哪裏的最後一個字段匹配一些輸入每行的。

string input = 
    "449 a dingo ate my baby THING\n" 
    "448 a dingo ate my baby THING\n" 
    "445 a dingo ate my baby BOOGNISH\n" 
    "446 a dingo ate my baby BOOGNISH\n" 
    "447 a dingo ate my baby STUFF\n"; 

比方說,我給我的正則表達式的下列字符串...

string re = "^([0-9]+).+?boognish$"; 
boost::regex expression(re,boost::regex::perl | boost:regex::icase); 

,然後建立了我的比賽

const int subs[] = { 0, 1 }; 
boost::sregex_token_iterator it(input.begin(), input.end(), expression, subs); 
boost::sregex_token_iterator end; 

while (it != end) 

{ 
    fprintf(stderr,"%s|\n", it->str().c_str()); 
    *it++; 
} 

下面是我從升壓得到輸出,請記住我要求全線和第一組比賽,我還要求「|」所以我們可以很容易地看到該行的末尾:

449  a dingo ate my baby   THING 
448  a dingo ate my baby  THING 
445  a dingo ate my baby   BOOGNISH| 
449| 
446  a dingo ate my baby   BOOGNISH| 
446| 

我真的很想445 |和446 |只是,它給了我449(直到碰到第一個BOOGNISH),然後是446.我在其他重新解析器上測試了它,它似乎工作正常。我在做什麼錯誤提升?

預先感謝您!

+1

'*它++'應該是'++ it'。但是(可能)不會影響你的結果。 – 2011-05-26 21:20:05

回答

1

acording到this articale你必須通過flag match_not_dot_newline的匹配算法。我認爲這會解決你的情況。

+0

perl使用boost :: regex :: no_mod_s! 這花了我一些修補,但我終於得到它的工作。你只是一個* tad *關閉,但非常接近。 因爲我用的是Perl的正則表達式引擎,它想讓我使用Perl選項/版的標誌。 (我嘗試使用match_not_dot_newline,但它仍然像以前一樣)。 要強制Perl的引擎設置該標誌,它看起來好像你需要使用升壓::正則表達式:: no_mod_s標誌。 感謝您的幫助。 – yggdrasil 2011-05-27 14:10:12

+0

這是因爲它是我第一次遇到提振,我第一次嘗試使用正則表達式其他任何視覺工作室搜索框! – Ali1S232 2011-05-27 14:23:03