Opened 9 years ago
Closed 9 years ago
#9380 closed Bugs (worksforme)
regex return empty submatch on some machines/compilers
Reported by: | Owned by: | John Maddock | |
---|---|---|---|
Milestone: | To Be Determined | Component: | regex |
Version: | Boost 1.55.0 | Severity: | Problem |
Keywords: | Cc: |
Description
Upgraded to 1.55.0 and now this regex fails on our 32bit Ubuntu, but still works fine on our 64bit Ubuntu and RedHat variants.
Configuration is: Ubuntu 8.04.4 LTS, 32bit, gcc 4.2.4
bool parseBusName(const std::string& busName) const { boost::regex regularExpressionBus ("^([^\[]+)\[([0-9]+)-([0-9]+)\]", boost::regex::extended); boost::cmatch w; if(!regex_match(busName.c_str(), w, regularExpressionBus)) return false; std::cerr << w.size() << " >" << w[1] << "< >" << w[2] << "< >" << w[3] << "<" << std::endl; return true; } parseBusName("top[0-1]") output is: 4 >< >< >< expected: 4 >top< >0< >1<
We where previously running boost 1.48.0 which worked fine on all our configurations.
NOTE: Replacing boost::regex::extended with boost::regex::perl makes the test pass again on 32bit/gcc4.2.4.
Thanks, Jannich
Change History (2)
comment:1 by , 9 years ago
comment:2 by , 9 years ago
Resolution: | → worksforme |
---|---|
Status: | new → closed |
Update: I've now had a chance to try this on Ubuntu (64-bit, but using -m32 to build 32-bit binaries) and it works fine for me.
Only thing I can think of is that you've somehow got the headers and/or binaries mismatched (ie different versions) on that machine?
Actually that shouldn't work in any compiler/situation, you need
"^([^\\[]+)\\[([0-9]+)-([0-9]+)\\]"
as the regular expression if it really is embedded in code like that.
Then it works for me.