Problem ze wzorem wyrażenia regularnego.

0

Witam,

chcę odczytać coś z takiego tekstu "<abag>to chce<ewt>"

to chcę ma zostać wypisane.

Zrobiłem coś takiego ">(.*?)<"
ale to zawsze wpisze mi ">to chce<"
a ja chcę ten tekst bez tych znaczków "<" i ">"

proszę o pomoc

0

Więc wykorzystaj to co łapiesz w grupę - matches. W \1 będzie dokładnie do czego oczekujesz.

0

możesz trochę jaśniej, bo nie czaję, to co łapię w grupę to jest między nawiasami, to dlaczego wypisuje mi też te znaczki, które muszę umieścić żeby wiadomo było że chcę tekst, który jest między nimi.
??

0

Pokaż lepiej kod. Wynikiem tego wyrażenia powinny być 2 stringi: \0 zawierający całość dopasowanego tekstu (włącznie z ><) oraz \1, zawierający tylko to co jest w pierwszej grupie (czyli w nawiasach). Prawdopodobnie odwołujesz się do całego dopasowanego tekstu zamiast do jednej z grup.

0

kod:


#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/regex.hpp>
#include <iostream>
#include <boost/foreach.hpp>
#include <fstream>
using namespace std;
using namespace boost;
int main()
{

string kod;

ifstream plik;

plik.open("dane.txt", ios::out);

if(plik.is_open())
{
	while(!plik.eof())
		{
		kod.push_back(plik.get());
		}
}
else cout << "dupa\n";

string kod2="<abag>to chce<ewt>";
//cout << kod << endl;
const static regex email_regex(
	""
	">([^<].*?[^>])<"
	""
	
);


vector< string > emails;

typedef find_iterator< string::iterator > string_find_iterator;
for ( string_find_iterator it =
make_find_iterator( kod2, regex_finder(email_regex) );
it != string_find_iterator(); ++it )
{
emails.push_back( copy_range< std::string >( *it ) );
}
BOOST_FOREACH( const string& email, emails ) cout << email << endl;

system("pause");
} 
0

mam taki kod źródłowy i chcę wydobyć pogrubione elementy,

próbowałem "<span class="TITLU_MENIU">([^<.?>].?)</span>" ale wypisuje całość

proszę o pomoc

Manchester United</td>
2</td>-</td>
Everton
1</td></tr>
Newcastle United</td>
2</td>-</td>
Derby County
2</td></tr>
22-12-2007</td></tr>
Arsenal</td>
2</td>1

0

jest coś takiego (lookahead, lookbehind).
więc można tak:

regex email_regex(
        "(?<=>)([^<].*?[^>])(?=<)"
);

IMHO ty bardziej potrzebujesz parsera XML a nie wyrażeń regularnych.

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