यह libstdC++ के कार्यान्वयन में एक बग है। इन देखें:
#include <string>
#include <regex>
#include <boost/regex.hpp>
#include <iostream>
int main() {
{
using namespace std;
regex my_r("(.*)(6)(.*)");
smatch m;
if (regex_match(std::string{"123456789"}, m, my_r)) {
std::cout << m.length(1) << ", "
<< m.length(2) << ", "
<< m.length(3) << std::endl;
}
}
{
using namespace boost;
regex my_r("(.*)(6)(.*)");
smatch m;
if (regex_match(std::string{"123456789"}, m, my_r)) {
std::cout << m.length(1) << ", "
<< m.length(2) << ", "
<< m.length(3) << std::endl;
}
}
return 0;
}
आप जीसीसी के साथ संकलन हैं, तो पहले एक (libstdC++) देता है पूरी तरह से गलत परिणाम 9, -2, 4 और दूसरा एक (बढ़ावा के कार्यान्वयन) रिटर्न 5, 1, 3 अपेक्षित के रूप में।
यदि आप क्लैंग + libC++ के साथ संकलित करते हैं, तो आपका कोड ठीक काम करता है।
(ध्यान दें कि libstdC++ के regex कार्यान्वयन केवल "आंशिक रूप से समर्थित" है, http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52719 में वर्णित है।)
ध्यान दें कि regex कार्यान्वयन समर्थन अभी भी जीसीसी और एमएसवीसी पर बहुत कम है। – inf
धन्यवाद, मैं जीसीसी 4.6.3 का उपयोग कर रहा हूँ। –
मैंने जी ++ 4.7 में अपग्रेड किया, लेकिन फिर भी वही आउटपुट। मुझे अभी भी लगता है कि यह मेरे हिस्से पर regexes की एक गलतफहमी है। अतीत में मैंने अपनी त्रुटियों के लिए अक्सर सॉफ्टवेयर को दोषी ठहराया है। –