Seite 1 von 1

Regular Expressions

Verfasst: 25. März 2010 20:12
von Mani99
Hallo,

ich hab probleme mit regular expressions, ich hab schon ein paar anleitungen gelesen und die wikipedia seite von vorne bis hinten und retour duch, aber ich hab noch immer ein verständnisproblem.

Folgendes:

Ich habe in einem QString folgende zeile stehen:

Code: Alles auswählen

QString t_str = "Dieser Text soll **fett** gedruckt werden"
und auch folgendes:

Code: Alles auswählen

QString t_str = "Dieser Text soll ***kursiv*** gedruckt werden"
Ich möchte mit regular expressions und der replace funktion von QString den text ersetzen. Jedoch findet folgender string

Code: Alles auswählen

QRegExp reg_exp("([\*]{2})([^\*.]+)[\*]{2})");
beide möglichkeiten, obwohl ich explizit angegeben habe exakt 2 sterne dann irgendein text jedoch keine sterne und dann wieder exakt 2 sterne.

Code: Alles auswählen

QString str("Der text ist **fett**").replace(reg_exp, "<b>\\1</b>");
Am ende sollte einfach folgendes rauskommen:

Code: Alles auswählen

**Fett** --> <b>Fett</b>
Was mach ich da falsch?

Verfasst: 25. März 2010 20:23
von upsala
Versuchs mal so:

Code: Alles auswählen

QRegExp reg_exp("(\\*{3})([^\\*]+)(\\*{3})");

Verfasst: 25. März 2010 21:12
von Mani99
Danke für die antwort, ich habe es so versucht, jedoch mit folgendem ergebnis:

input:

Code: Alles auswählen

**Text**
***Text***
*****Text*****
output:

Code: Alles auswählen

**Text**
<b>***</b>
**<b>***</b>**
Das erste wird ignoriert, das passt, aber beim zweiten nimmt er nur die drei sterne und bei dritten mehrere sterne.

//EDIT:

Jetzt hab ich den ablauf begriffen, wenn ich folgendes schreiben:

Code: Alles auswählen

test_str.replace("(\\*{3})([^\\*]+)(\\*{3})",QString(<b>%1</b>).arg("\\2"));
Regexp zerlegt alles in ein array und mit \\1 bekomme ich die *** und mit \\2 den text "Text" und \\3 die letzten drei ***

Danke!