Jak zrobić wzorzec do wyrażenia regularnego ?

0

Mam dany string : abcd:2383273827hhh8

Chce zeby program wyrzucał mi tylko: 2383273827hhh8
a on wyświetla mi :2383273827hhh8 (z dwukropkiem na początku)
Poza tym jak drugi raz wpisze taki string to juz nie wyświetla ten program nic
Jakie powinno być właściwe wyrażenie regularne ?

 
#include <iostream>
#include <string>
#include <boost/regex.hpp>

using namespace boost;
using namespace std;



int main()
{

	
	 string tekst;
    int line = 0;
    regex wzorzec( ":.*" );
	
	cout << "Witaj!\n\007";
    cout << "Pisz. Aby skończyć wćiśnij [Ctrl] + [z] w nowym wierszu\n\n";
	
	while( getline( cin, tekst ) )
    {
        smatch wynik; // tutaj będzie zapisany wynik
        ++line;
        if( regex_search( tekst, wynik, wzorzec ) )
             cout << "Linia " << line << " : " << wynik[0] << '\n';
        
        cin >> tekst;
    }
    system( "pause" );
	
        return 0;
}

moj wzorzec jest taki: regex wzorzec( ":.*" );

0

Musisz do tego użyć grup w regexie.

Czyli regex powinien wyglądać (w najprostszej postaci) tak:

":(.*)"

I Ciebie interesuje grupa złapana przez nawias:
http://www.boost.org/doc/libs/1_33_1/libs/regex/doc/captures.html

0

Nie korzystałem nigdy z boost regex, ale przez analogię do innych implementacji:

  1. nie masz żadnej capture group; wzorzec powinien raczej wyglądać tak: :(.*)
  2. z reguły pod indeksem 0 nie jest pierwsza grupa, a treść pasująca pod całe wyrażenie, włącznie z :. Pierwsza grupa będzie pod indeksem 1.
  3. sprawa i chyba najważniejsza: po co do tego zaprzęgać regexy?
0
Rev napisał(a):
  1. sprawa i chyba najważniejsza: po co do tego zaprzęgać regexy?

No właśnie, przecież wystarczyłby zwykły split po ":" ;)

A do samego testowania regexów polecam skorzystać z odpowiedniego oprogramowania, np. prosty program Kiki. Wszystko ładnie zaznacza.
user image

0

dzieki wielkie. bo wlasnie ta dana jest juz ze splitu wlasciwie to funkcji. podobnej do explode z php. czyli ze lepiej by bylo znowu puscic po explode ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1