2016-07-30 110 views
0

Ich bin ein Anfänger über reguläre Ausdrücke (sorry). Ich habe versucht, eine sehr einfache Auszeichnungssprache zu erstellen, die fett und kursiv ist und sie dann in HTML konvertiert. Hier ist ein Beispiel für fett, dass ich mit:Regex in Golang: Wie wird ein Zeichen gesetzt, das die Zeichenfolge nicht übereinstimmt?

var bold = regexp.MustCompile("\\*([^\\*]+)\\*") 

Sie paßt alles zwischen zwei Sternchen. Jetzt möchte ich, dass es *test*, aber nicht \*test* entspricht. Da ich nicht viel über reguläre Ausdrücke weiß, aber ich versuche, dieses Experiment zu machen, würde ich gerne wissen, was dafür der Weg ist. Ich habe überall gesucht, aber ich konnte nicht den Weg finden, dies zum Laufen zu bringen.

+0

Das Problem hier ist, dass, wenn Sie '\\ * test *' der Ansatz wird nicht funktionieren. Sie sollten einen Parser für diese Aufgabe schreiben, verwenden Sie keine regulären Ausdrücke. –

Antwort

0

Aktualisiert

Go nicht Lookbehinds unterstützen. So ein Workaround kann sein:

(?:\A|(?:[^\\]+|\A)(\\{2})+|[^\\])\*([^\\*]+)\* 
+0

Dieser Regex passt nicht zu '\\ * test *', während dieser 'Test' zwischen gültigen '*' Trennzeichen steht. Man kann sich nicht auf 1-Regex-Lösung verlassen, wenn Strings mit Escape-Sequenzen analysiert werden. –

+0

Warum sollte es '\\ * test *'? @ WiktorStribiżew – revo

+0

Da '' \\ '' ist ein Literal '' '' ', und dann kommt' * test * ', die übereinstimmen sollte. –