हैकिंग और पढ़ने के लायक दिनों के बाद, मुझे बूस्ट के रेगेक्स इंजन के साथ कोई भाग्य नहीं मिला है, उम्मीद है कि यहां कोई मदद कर सकता है।नियमित अभिव्यक्ति कैप्चर समूह को बढ़ावा दें
मैं प्रत्येक पंक्ति से पहले फ़ील्ड को पकड़ना चाहता हूं जहां अंतिम फ़ील्ड कुछ इनपुट से मेल खाता है।
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";
चलो कहते हैं कि मैं अपने regex देता हूँ निम्न स्ट्रिंग ...
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++;
}
यहाँ की स्थापना की उत्पादन मैं बढ़ावा से हो रही है है , ध्यान रखें मैंने पूरी लाइन और समूह 1 मैच दोनों के लिए पूछा, मैंने एक "|" इसलिए हम आसानी से लाइन के अंत को देख सकते हैं:
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 | केवल, लेकिन यह मुझे 44 9 दे रहा है (जब तक यह पहली बुगनिष हिट नहीं करता) और फिर 446. मैंने इसका परीक्षण अन्य रीर्सर्स पर किया है, और ऐसा लगता है कि यह ठीक काम करता है। मैं बढ़ावा देने के साथ क्या गलत कर रहा हूँ?
अग्रिम धन्यवाद!
'* यह ++' '++ होना चाहिए। लेकिन वह (शायद) आपके परिणामों को प्रभावित नहीं करता है। –