Re: find function of String
* coolchap, on 20.10.2010 17:56:
Thank you for all your responses. I guess I am not very clear in my
question. Actually it is nothing complicated. All text except [ or ]
needs to be extracted. there is no complex stuff of subsets etc...
In that case, how about
<code>
#include <algorithm>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
void analyze( string s )
{
replace( s.begin(), s.end(), '[', ' ' );
replace( s.begin(), s.end(), ']', ' ' );
istringstream stream( s );
string id, numSpec;
while( stream >> id >> numSpec )
{
cout << id << ' ' << numSpec << endl;
}
}
int main()
{
analyze( "[SBD 65 [INI 25 [PUP 0 ][RPN 25 ]][ANA 1 ][BUIPNR0 ][BUIPAX 1 ]" );
}
</code>
?
Anywayz I found a simple way using boost::regex to match only the
characters followed by numbers
Some people, when confronted with a problem, think ?I know, I'll use regular
expressions.? Now they have two problems.
- Jamie Zawinski
int main(int argc, char* argv[])
{
try
{
cout<< "[START REGEXP CHECKING]"<< endl;
// String to be validated
string myString = "[SBD 65 [INI 25 [PUP 0 ][RPN 25 ]][ANA 1 ][BUIPNR
0 ][BUIPAX 1 ]";
// Regular Expression to be used.
string myRegexp = "[a-zA-Z]+\\s\\d+";
boost::regex aMyRegExp(myRegexp);
// Needed to extract some part from myString, considering the sub-
expressions grouped by "()"
boost::cmatch matches;
cout<< endl<< "String: "<< myString;
cout<< endl<< "Regular Expression: "<< myRegexp<< endl;
// Checking if myString matches the Regular Expression.
// Use boost::regex_match(myString.c_str(), aMyRegExp) if the
extraction is not needed
std::string::const_iterator start, end;
start = myString.begin();
end = myString.end();
boost::match_results<std::string::const_iterator> what;
boost::match_flag_type flags = boost::match_default;
while (regex_search(start, end, what, aMyRegExp, flags)){
cout<< "Size: "<< what.size()<< endl;
cout<< "Result: "<< what<< endl;
// update start position
start = what[0].second;
}
cout<< endl<< endl<< "[END REGEXP CHECKING]"<< endl;
return 0;
}
catch (...)
{
cout<< "EXCEPTION!!!!"<< endl;
return 1;
}
}
This prints out only text in the format of XYZ 34 etc
He he. :-)
Cheers & hth.,
- Alf
--
blog at <url: http://alfps.wordpress.com>