| 

.NET C# Java Javascript Exception

4
Folgendes Pattern wird in einem String entfernt: "/\*[\d\D]*?\*/"

Was genau wird dort entfernt?
08.06.2011
Gast
73 2
2 Antworten
2
ein Stern gefolgt von
eine Folge von Ziffern oder Nichtziffern (also irgendwas, kann auch leer sein) gefolgt von
einem Stern

Das *? ermittelt den kleinsten Teilstring, so dass der gesamte Ausdruck matcht.
08.06.2011
theorist 494 5
4
// \*[\d\D]*?\*
//
// Match the character "*" literally «\*»
// Match a single character present in the list below «[\d\D]*?»
// Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
// Match a single digit 0..9 «\d»
// Match a single character that is not a digit 0..9 «\D»
// Match the character "*" literally «\*»


Mal ganz abgesehen davon das der Ausdruck so "schwachsinn" ähm tschuldigung, ich meine natürlich "unnötig kompliziert" ist ;) Ein einfaches "\*.*?\*" hätte es auch getan.
08.06.2011
Floyd 11,0k 3 9
Floyd 11,0k 3 9
1
Ist das wirklich Schwachsinn? .* ist nicht das gleiche wie [\d\D]*? , in den meisten Regex-Dialekten beinhaltet der Punkt kein NEWLINE, mit [\d\D]*? hast du wirklich alles, bis ein Stern kommt, auch NEWLINE.
Sparky 08.06.2011
2
Das ist richtig, aber in den meisten Dialekten gibt es dafür die RegEx-Option "SingleLine" oder "DotMatchesNewLine" oder ähnlich. "[.\n]" oder "[.\s]" wäre noch alternativen wenn man die Option nicht anschalten kann.
Floyd 08.06.2011
da hast du wieder recht :-)
Sparky 08.06.2011
1
Floyd, mich würde mal interessieren, woher Du die von Dir gepostete, englische Erklärung hast. Das sieht für mich so aus, als würde es da eine Webseite für geben, in der ich Reg-Ausdrücke eintragen kann und dann die Antwort so rauskommt.
Jens Duczmal 08.06.2011
3
Die Erzeugt das Tool RegExBuddy (http://www.regexbuddy.com/index.html). Ich finde das Tool ist wirklich Gold wert wenn man viel mit RegEx-Ausdrücken arbeitet. Es gibt auch ne Trial-Version zum ausprobieren.
Floyd 08.06.2011
Man dankt :)
Jens Duczmal 08.06.2011
Einfacher und schneller (in der Ausführung) und ein echtes Äquivalent ist \*[^*]*\*.

Der Test auf den abschließenden Stern muss nach jedem Zeichen erneut durchgeführt werden.

Zwar wird mit [\d\D] jedes Zeichen ausgewählt, aber nur so wenig wie möglich vor einem Stern. Daher kann man auch nach beliebig vielen Zeichen außer Stern suchen.. (und danach den Stern).

[.\n] funktioniert in .net und JavaScript im Übrigen nicht (bei anderen Implementierungen weiß ich es nicht). Dort gilt aber [.] == \.
WolfgangKluge 12.07.2011

Stelle deine Regular-expressions-Frage jetzt!