C++ und reguläre Ausdrücke

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • C++ und reguläre Ausdrücke

    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
    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);
    }
    gut, ist noch nicht perfekt, aber derzeit gehts mir nur um die regulären Ausdrücke.

    Irgendjemand eine Idee ?
    TBT

    Die zwei wichtigsten Regeln für eine berufliche Karriere:
    1. Verrate niemals alles was du weißt!


    PHP 2 AllPatrizier II Browsergame
Lädt...
X