Hallo, 
ich habe hier ein kleines Projekt in C++, welches reguläre Ausdrücke nutzt.
Dazu habe ich mir GRETA ( http://research.microsoft.com/projec...auserguide.htm )
geholt.
Die Ausdrücke klappen recht gut, doch schaffe ich es nicht mehrere Matches
abzufragen. Er gibt mir immer nur ein Ergebniss. Ich bräuchte aber sowas wie
in PHP "preg_match_all()"
mein Prog
	gut, ist noch nicht perfekt, aber derzeit gehts mir nur um die regulären Ausdrücke.
Irgendjemand eine Idee ?
					ich habe hier ein kleines Projekt in C++, welches reguläre Ausdrücke nutzt.
Dazu habe ich mir GRETA ( http://research.microsoft.com/projec...auserguide.htm )
geholt.
Die Ausdrücke klappen recht gut, doch schaffe ich es nicht mehrere Matches
abzufragen. Er gibt mir immer nur ein Ergebniss. Ich bräuchte aber sowas wie
in PHP "preg_match_all()"
mein Prog
Code:
	
	void Set::load(char* _name)
{
	strstream buffer;
	buffer << this->path << "/" << _name << ends;
	char* file = buffer.str();
	
#ifdef _DEBUG
	fprintf(stderr,"Set : loading file \"");
	fprintf(stderr,file);
	fprintf(stderr,"\"\n");
#endif
	int fh, count = 0;
	char reader[10240];
	char all[102400]="";
	
	if( (fh = _open( file, _O_RDONLY )) != -1 )
	{
		while (!_eof(fh))// && ((count=_read(fh,reader,10240)) >= 0) )
		{
			if( (count = _read( fh, reader, 10240 )) == -1 )
			{
				perror( "Read error" );
				break;
			}
			strncat(all,reader,count);
		}		
		_close( fh );
#ifdef _DEBUG
	fprintf(stderr,"Set : file loaded\n");
	fprintf(stderr,"Set : splitting file\n");
#endif
	
		regex::match_results results;
		string str( all );
		static const regex::rpattern pat( "\\[block ([a-z_]*)\\](.*)\\[/block\\]" );  
		// The double-escapes are necessary to satisfy the compiler.
		regex::match_results::backref_type br = pat.match( str, results );
		if( br.matched ) { 
#ifdef _DEBUG
			strstream b;
			b << pat.cgroups() << ends;
			strstream buffer;
			buffer << results.cbackrefs() << ends;
			fprintf(stderr,"Set : match success!\n" );
			fprintf(stderr,"Gesammtreferenzen: ");
			fprintf(stderr,buffer.str());
			fprintf(stderr,"   Groups: ");
			fprintf(stderr,b.str());
			fprintf(stderr,"\n");
			for(uint i = 0; i< results.cbackrefs(); ++i )
			{
				br = results.backref(i);
				string str2(br.str());
				fprintf(stderr,"\n*********************\n");
				fprintf(stderr,str2.c_str());
				fprintf(stderr,"\n*********************\n\n");
			}	
#endif		
	
			// here follow the real code
		} else {
#ifdef _DEBUG
	fprintf(stderr, "Set : match failed!\n" );
#endif
			// no block found !
		}
	}
	buffer.freeze(0);
}
Irgendjemand eine Idee ?
 
          
 Moderator
 Moderator