Gute Regular Expressions

Gajim, Trac und viele andere Projekte haben oft das Problem dass URIs nicht vollständig/garnicht erkannt werden, zu zeitig enden oder zuviel erkannt wird. (Sacred-Chao und seine Exportfunktion für Facts bilden da keine Ausnahme, allerdings habe ich mir erheblich weniger Mühe gemacht und auf RegExp komplett verzichtet)Aber laut "Die Welt ist garnicht so" ist es ganz einfach eine passende RegExp für so ziemlich alle URIs zu erstellen.

Das Ergebnis sieht dann ungefähr so aus:

((?<=\()[A-Za-z][A-Za-z0-9+.-]*:([A-Za-z0-9+\.-_~:/\?#\[\]@!\$&'\(\)\*\+,;=]|%[A-Fa-f0-9]{2})+(?=\)))|([A-Za-z][A-Za-z0-9+.-]*:([A-Za-z0-9+\.-_~:/\?#\[\]@!\$&'\(\)\*\+,;=]|%[A-Fa-f0-9]{2})+)

ich suche immer noch nach einem Zeichen für Ironie an der Stelle wo die "gute" RegExp vorgestellt wird. Wundert sich ernsthaft noch jemand warum ich die Dinger noch nie leiden konnte?

Importierte/Alte Kommentare:

#219: 27.Jun.2008 09:06 von profmakx

schreib halt eine LTL-Formel hin schulterzuck.

#220: 27.Jun.2008 09:06 von CracKPod

Hey,
Ich schreibe ja auch gelegentlich Python Scripts und könnte RegExp eigentlich für manche Sachen ganz gut verwenden aber wie du schon sagtest, so ein Monster ist einfach hässlich. Vor allen Dingen blickt man überhaupt gar nicht mehr durch falls man sich nicht verdammt gut mit Regulären Ausdrücken auskennt.

Ich hasse diese Dinger auch.

MfG,
CracKPod

#221: 27.Jun.2008 10:06 von Dr. Azrael Tod

@makx: Nichmal Wikipedia sagt mir was eine LTL-Formel sein soll... so wie ich dich kenne wage ich irgendwie auch zu bezweifeln dass dies für Nichtmathematiker einfacher zu verstehen ist als RegExp. g

@CracKPod: bezüglich deines Zweiten Kommentars: Linktausch wird es hier nicht geben da ich keine Linkliste habe (wie auch schon recht oft geschrieben -.-)
Zuletzt war das wohl unter den Kommentaren zu Wine 1.0. Das selbe was ich Seufz geantwortet hab gilt also auch für dich.

#222: 27.Jun.2008 11:06 von DrNI

RegExen sind böse Drachen: Ziemlich hässlich aber enorm stark! Ich hassliebe sie.

#223: 27.Jun.2008 12:06 von profmakx

Ein regulärer Ausdruck ist ja nur eine Möglichkeit um eine reguläre Sprache zu definieren. RegExps eignen sich "hervorragend" dazu das auftreten von bestimmten Mustern zu definieren. Wenn es daran geht das nicht-auftreten von solchen Dingern zu definieren eignen sich andere Formen besser, wie zum Beispiel logische Formeln. So schwer zu verstehen ist das ganze eigentlich nicht.

Wenn man oben genannte RegExp ein bischen verzuckert mit etablierten dingen wie :digit:, dann wird das ganze bestimmt auch ne ganze Ecke übersichtlicher.

Nicht zuletzt ist es nicht verboten zu kommentieren, was eine Regexp matchen soll (fehlersuche ist zugegebenermaszen meistens zwecklos, da hat man schneller selber eine geschrieben).

Mal davon abgesehen, dass das da oben streng genommen schon keine RegExp mehr ist sondern eine erweiterte solche mit Lookahead und Behind und solchen Spirenzchen.

#224: 27.Jun.2008 11:06 von RegEx#2 &laquo; G33KY^2 - The Nerd Strikes Back

[...] Im gegensatz zu meinem letzten Beitrag hat Coding Horror jetzt mal einen Beitrag gebracht wie man RegExpressions wirklich sinnvoll [...]

Geschrieben von Dr. Azrael Tod
Later article
gajim nervt
Older article
RegEx#2