Regular Expressions

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Regular Expressions

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Versuchs mal so:

Code: Alles auswählen

QRegExp reg_exp("(\\*{3})([^\\*]+)(\\*{3})");
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Beitrag 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!
Antworten