Krautkanal.com

Veröffentlicht am 2015-02-03 22:46:37 in /prog/

/prog/ 6522: Hallo Bernd, warum haben reguläre Ausdrücke ...

jajodia_saket Avatar
jajodia_saket:#6522

Hallo Bernd,
warum haben reguläre Ausdrücke so einen schlechten Ruf?
Ich lerne diese gerade im Studium, und sie klingen doch für manche Sachen relativ hilfreich.

emmakardaras Avatar
emmakardaras:#6523

Ab einer gewissen Komplexitätsstufe werden sie unlesbar.

liang Avatar
liang:#6525

Haben sie das? Wäre mir neu. Der kann auch nicht so schlecht sein, wenn ihr sie lernt.

joki4 Avatar
joki4:#6527

>>6522
Das Problem ist, dass sie hin und wieder von irgendwelchen Dorftrotteln zum Parsen von nicht-regulären Grammatiken benutzt werden.

Bei manchen Erweiterungen der Funktionalität ist das zwar möglich, ist aber scheiße.

Man will ab einem bestimmten Punkt einen richtigen Parser, sei es der Performance oder der Lesbarkeit zugunsten.

anjhero Avatar
anjhero:#6529

>warum haben reguläre Ausdrücke so einen schlechten Ruf?
Nur bei denen die nicht inzu reguläre Ausdrücke können.

edobene Avatar
edobene:#6530

>>6529
Eigentlich eher bei Leuten, die Code warten müssen in dem HTML damit geparst wird.

alessandroribe Avatar
alessandroribe:#6531

>>6522
>warum haben reguläre Ausdrücke so einen schlechten Ruf?
Bernd fasst mal zusammen:
• Weil viele Leute keine Ahnung davon haben, was darin eigentlich passiert.
• Weil es zu oft passiert, dass man Kot warten darf, welcher auf elend langen, unlesbaren, unkommentierten und wirklich immer fehlerhaften regulären Ausdrücken aufbaut.
• Weil viel zu oft reguläre Ausdrücke an Stellen benutzt werden, wo das gleiche Problem mit einfacheren Methoden und deutlich besserer Leistung gelöst werden könnte.
• Weil viel zu oft reguläre Ausdrücke an Stellen benutzt werden, wo das Problem mit regulären Ausdrücken gar nicht vernünftig gelöst werden kann.
• Weil es Scheiße ist, mit der /|*+()[]{}-Grammatik ohne eine sehr gute Syntaxhervorhebung (und wie oft gibt es die schon) zu arbeiten.

falvarad Avatar
falvarad:#6534

Gerade eben gebraucht. Könnte nicht ohne.
text1 = sub("&#[0-9]*;", "", qualle1) # Ärgerlich
text2 = sub("&[A-Za-z]*;", "", qualle2) # Ärgerlich
assert(text1 == text2)

peterlandt Avatar
peterlandt:#6538

>>6534
Ärgerlich, wenn auch beim 1922435-ten regexp-basierten ad hoc-Parser direkt ein Stück Syntax fehlt. (Auch: "füllen" == "fällen" modulo dein Dingsda.)

commoncentssss Avatar
commoncentssss:#6539

>>6534
>>6538
Canonical Strings haben oft solche Problemchen. oe und ö sollten gleich sein, etc.
Anstatt die Buchstaben einfach wegzuwerfen, sollte man hier eine ordentlich Ersetzung machen. Es ist ja nicht so schwer HTML Codes zu UTF-8 zu wandeln.

seanwashington Avatar
seanwashington:#6543

>>6538
>>6539
Wieso sollte man für einen kurzen Test unverwandte Probleme lösen?

polarity Avatar
polarity:#6544

>>6543
Der Test ob deine RegEx kacke sind?

sementiy Avatar
sementiy:#6545

>>6544
Die sind perfekt, weil sie ihre Aufgabe erledigt haben.

>>6522
>warum haben reguläre Ausdrücke so einen schlechten Ruf?
Regexpe sind prädestiniert für pragmatische Lösungen und Nichtskönner fürchten Pragmatik meer als alles andere.

mhwelander Avatar
mhwelander:#6546

Regex ist nett, um die Pornosammlung zu sortieren und andere Dinge, bei denen es kein Beinbruch ist, wenn was schief läuft. Für Eigengebrauch gut, ansonsten brandgefährlich und wartungsintensiv.

ritapetrilli87 Avatar
ritapetrilli87:#6547

Die haben einen schlechten Ruf, weil viele Idioten versuchen reguläre Ausdrücke dort zu verwenden, wo man andere Technologien verwenden sollte - z.B. viele Laien versuchen oft mit Regexps HTML zu bearbeiten, was ein No-go ist, da HTML keine reguläre Sprache (siehe Chomsky-Grammatiken) ist.

eloisem Avatar
eloisem:#6548

>>6547
>da HTML keine reguläre Sprache ist
Diese Einschränkung ist irrelevant. Sie trifft nur zu, wenn man einen vollständigen Parser für die Sprache entwirft und dafür würde eh niemand Reguläre Ausdrücke nutzen.
Allerdings sind sie genau das richtige Werkzeug, um ein paar Daten aus einem mehr oder weniger bekannten Dokumenten zu ziehen und das gilt natürlich auch für HTML-Dokumente.

pehamondello Avatar
pehamondello:#6549

>>6545
Was heute so eine "pragmatische Lösung" ist, kann schon morgen zum geschäftsruinierenden Problem werden.

Eine saubere Lösung würde nicht sehr viel länger dauern: über DOM-Objekte ein Dokument passenden Typs, vorher selbstverständlich festzulegen oder zu bestimmen, erstellen, das Dokumentfragment einfügen, die Zeichenkette mit aufgelösten Entities abholen und je nach Verwendungszweck, über den hier ja nichts gesagt wurde, vielleicht noch auf libiconv zwecks sinnvoller Konvertierung von Unicode in einen eingeschränkteren Zeichensatz zurückgreifen. Bernd würde ein Beispiel liefern, möchte aber keine Beihilfe zu solch zweifelhaften Anstrengungen leisten.

Nicht viel länger dauert es natürlich nur, wenn man diese Sachen auch kennt und kann. Wenn nicht, ist eine triebbefriedigende Ersatznutzung regulärer Ausdrücke aber nicht Pragmatismus, sondern simpler Bildungsmangel.

>>6548
>Allerdings sind sie genau das richtige Werkzeug, um ein paar Daten aus einem mehr oder weniger bekannten Dokumenten zu ziehen und das gilt natürlich auch für HTML-Dokumente.
Unfug, dafür gibt es XSLT.

kuldarkalvik Avatar
kuldarkalvik:#6550

>>6548
Falsch, Bernd ist wohl ein Fagottspieler.

Regexes sollte man schon dann nicht mehr benutzen, sobald irgend etwas verschachtelt ist.

Das betrifft auch BB-Code.

Der ist zugegebener Maßen eh Dreck.

ryanmclaughlin Avatar
ryanmclaughlin:#6551

>>6550
>Bernd ist wohl ein Fagottspieler.
Nein, aber frag doch mal auf /b/.

>>6549
>Was heute so eine "pragmatische Lösung" ist, kann schon morgen zum geschäftsruinierenden Problem werden.
Oh, ein Oxymoron.

>Eine saubere Lösung würde nicht sehr viel länger dauern
Schon das Einbinden deiner aufgeblähten Parser-Bibliothek ist aufwändiger als die beiden Ausdrücke. Den Aufwand gleichzusetzen ist dermaßen falsch, dass du deine wüsten Vorwürfe glatt zurück bekommst.

Auch:
>saubere Lösung
>XML-Werkzeuge für HTML
Ich lachte. Für XML gibt es allerdings reguläre Ausdrücke also relax.

Neuste Fäden in diesem Brett: