Ist es ein Muss für jeden Programmierer, reguläre Ausdrücke zu lernen? [geschlossen]

82

Ich bin neu in der Programmierung und habe bei einem Interview eine Frage zu regulären Ausdrücken bekommen. Unnötig zu erwähnen, dass ich nicht antworten konnte. Also habe ich mich gefragt, ob ich regulären Ausdruck lernen soll? Ist es ein Muss für jeden Programmierer in allen Bereichen? Oder ist es ein Muss für die Programmierung bestimmter Bereiche?

Verwandte Fragen:

Benutzer
quelle
55
Ich persönlich weiß, was sie sind, wann sie verwendet werden und wie man die Google-Syntax verwendet. Achselzucken
Tyanna
35
Es ist ein Muss für alle Power-User. Und Programmierer müssen Poweruser sein, um produktiv zu sein.
SK-logic
8
Warum willst du sie nicht lernen? Sie haben bereits mindestens eine Situation erlebt, in der Sie davon profitiert hätten, sie zu kennen. Liegt es nicht nahe, dass Sie sich in Zukunft in einer ähnlichen Situation befinden?
FishBasketGordo
23
Nur diejenigen, die mit Text arbeiten :)
Steve Jackson

Antworten:

113

Reguläre Ausdrücke sind ein unglaublich praktisches Werkzeug, das in so vielen Sprachen verfügbar ist, dass die meisten Entwickler sie früher oder später lernen werden.

Für einen Interviewer sind sie eine gute Möglichkeit, Erfahrungen während eines Interviews zu sammeln. Wenn Sie jemanden mit jahrelanger Erfahrung interviewen, der sie nicht versteht, müssen Sie weiter graben.

ptyx
quelle
4
Ich stimme zu, es ist eine gute Frage für jeden erfahrenen Entwickler. Aber einen frisch gebackenen Absolventen ohne Berufserfahrung zu fragen, ist wahrscheinlich etwas unfair - es sei denn, er wollte wirklich Bewerber herausfiltern, die überhaupt keine praktische Programmiererfahrung haben.
SK-logic
2
@ SK-Logik: Kommt auf die Schule an. Wir hatten alle im 2. Jahr einen Pflichtkurs, in dem reguläre Ausdrücke ziemlich häufig verwendet wurden (ich gebe zu, da habe ich mich an sie gewöhnt;)). Und mehr als ein paar Kurse für Senioren brachten sie wieder zur Sprache, wenn auch nie ganz so intensiv.
FrustratedWithFormsDesigner
Einverstanden mit den obigen Kommentaren - ich würde nicht erwarten, dass jemand, der gerade die Schule verlässt, unbedingt reguläre Ausdrücke kennt. Aber ich könnte immer noch fragen.
Ptyx
13
Da ich Mathematiker bin, habe ich keinen formalen Hintergrund in der Informatik, aber ich hätte gedacht, dass reguläre Ausdrücke tatsächlich in Universitätskursen unterrichtet werden, während Grammatiken, Parser, Automaten und so weiter behandelt werden. Eigentlich hatte ich erwartet, dass jemand, der gerade das College beendet hatte, ein besseres Wissen hat als ein erfahrener Programmierer ohne CS-Studium. : - /
Andrea
8
@Andrea, als ich an der Universität war (BS in Computer Science), wurden in der Tat reguläre Ausdrücke beim Erlernen von Grammatiken und Automaten behandelt. Es wurde jedoch nur das formale Konzept behandelt, nicht die Bewerbung. Wir haben weder die POSIX- oder Perl-kompatible Syntax für reguläre Ausdrücke noch deren Verwendung in unserer Codierung gelernt. Wir haben gelernt, wie man ein Zustandsdiagramm eines Automaten mit endlichen Zuständen zeichnet, dieses als regulären Ausdruck schreibt usw. Es handelte sich um griechische Buchstaben, nicht um Grep- und Textdateien.
Adam Jaskiewicz
54

Reguläre Ausdrücke sind ein Werkzeug. Es ist ein sehr nützliches Werkzeug, so dass viele Leute lernen, wie man es benutzt. Es gibt jedoch keine "Voraussetzung", dass Sie lernen, wie Sie dieses spezielle Tool verwenden, und es gibt auch keine "Voraussetzung", dass Sie etwas anderes lernen.

eykanal
quelle
19
Dies ist genauso wahr wie zu sagen, dass das Verstehen der Booleschen Logik nützlich, aber nicht erforderlich ist.
Oded
1
@Oded: Ich habe keine Verwendung für die in meinem Kurs gelehrte Boolesche Logik gefunden.
DeadMG
16
@DeadMG, ich verwende die ganze Zeit boolesche Logik, zum Beispiel bei Konvertierungen: if (!(foo && bar))=> if (!foo || !bar). Vielleicht haben Sie es benutzt und nicht verstanden, oder vielleicht wurde Ihnen nicht das richtige Material beigebracht.
zzzzBov
7
Mögen Sie die Versionskontrolle? Oder Softwaretests?
Konrad Rudolph
2
@ruakh - Ich stimme zu, dass sie äußerst nützlich sind; Ich benutze sie selbst die ganze Zeit. Ich denke, alle Programmierer sollten irgendwann in ihrer Karriere lernen, wie man reguläre Ausdrücke verwendet. Die Frage stellte das jedoch nicht.
Eykanal
33

Es würde mich nicht wundern, wenn beispielsweise ein Spieleprogrammierer oder ein Programmierer am LHC nie reguläre Ausdrücke gelernt hätte. Ich könnte sogar einem Spieleprogrammierer einen Pass geben, der SQL nicht kennt.

Wenn Sie jedoch in Informationssystemen jeglicher Art arbeiten und keine regulären Ausdrücke kennen, tun Sie sich selbst einen schlechten Dienst.

Auf der anderen Seite würde ich nicht erwarten, dass Ihr Standard-IS-Programmierer die Matrixmathematik kennt, die ein Spieleprogrammierer kennt. Es gibt unterschiedliche Disziplinen von Programmierern, jedoch müssen wir unter das Dach der "Informationssysteme" fallen.

Jonathan Rich
quelle
1
Programmierer am LHC verwenden möglicherweise reguläre Ausdrücke, um Datendateien zu durchsuchen, die von Sensoren erstellt wurden. Spieleprogrammierer können reguläre Ausdrücke verwenden, um die von ihren Spielen erzeugten Protokolldateien zu durchsuchen. Ok, sie könnten nicht haben , aber es könnte wahrscheinlich solche Aufgaben viel einfacher machen.
FrustratedWithFormsDesigner
1
Ich stimme zu, aber wenn ich ein Vorstellungsgespräch für eine Position als Spieleprogrammierer führen würde, würde ich trotzdem jemanden einstellen, der nicht weiß, was ein regulärer Ausdruck ist. Wenn ich jemanden in einer traditionellen Geschäftsprogrammierrolle anstellen würde, der nicht wusste, was reguläre Ausdrücke sind, würde er wahrscheinlich nicht angestellt werden.
Jonathan Rich
Das ist fair, denke ich.
FrustratedWithFormsDesigner
7
Teilchenphysiker arbeiten meist in unixähnlichen Umgebungen, aber wie alles andere, was mit dem Computer zu tun hat, werden die meisten Fähigkeiten durch mündliche Überlieferungen vermittelt. Das Niveau der Raffinesse in regulären Ausdrücken variiert. Wir durchsuchen die Daten jedoch nicht mit regulären Ausdrücken: Es sind zu viele Daten vorhanden und sie liegen nicht in Textformaten vor. Wir durchsuchen Protokolle und Ad-hoc -Datenbanken sowie Code und halbherzige Dokumentationen wie alle anderen auch.
dmckee
1
@FrustratedWithFormsDesigner, ich würde keinen Spieleprogrammierer einstellen, der Regex nicht kennt. Die Programmierung ist von Natur aus informationsintensiv, unabhängig vom Fachgebiet . Egal, was Sie tun - in jeder Disziplin verfügen Sie über Quellcode, regex-fähige Texteditoren und Protokolldateien. Ohne regex Sie werden bei der Durchführung bestimmter Aufgaben deutlich weniger effizient sein (auch wenn Sie nicht eine einzige Zeile regex im verschifft Spiel schreiben müssen). Ich sage nicht, dass Regex für einen Spieleprogrammierer notwendig ist . Ich sage nur, ich würde keinen einstellen, der es nicht weiß.
Ben Lee
22

Reguläre Ausdrücke sind eine sehr knappe Methode, um die Übereinstimmung von Mustern im Text auszudrücken.

Die Anforderung, Daten aus Text zu analysieren und zu extrahieren oder zu validieren, dass ein Teil des Textes einem bestimmten Muster entspricht, kommt bei der Programmierung sehr häufig vor. Daher würde ich sagen, dass es wichtig ist, sie kennenzulernen und zu verstehen.

Sie sind ein gutes Werkzeug in Ihrer Toolbox und ich würde jeden erfahrenen Programmierer erwarten, der weiß, wie man sie benutzt.

Eine der besten Quellen, um etwas über reguläre Ausdrücke zu lernen, ist Jeffery Friedls Buch Mastering Regular Expressions . Es ist ziemlich fortgeschritten, so dass Sie es vielleicht tatsächlich lesen möchten, wenn Sie etwas mehr Erfahrung haben.

Sie können mit dem Tutorial unter regular-expressions.info beginnen .

Oded
quelle
2
Das ist für mich Geschmackssache. Ich habe sie nie wirklich gebraucht. Ich habe sie bei ein paar Projekten verwendet, daher weiß ich, wie sie funktionieren, aber ich hätte leicht ohne sie auskommen und sie öfter missbraucht sehen können, als ich es für nötig hielt. Um ein Muster
Rune FS
15

Im Gegensatz zu den meisten Antworten hier denke ich nicht, dass die Kenntnis von Reg-Exs eine erforderliche Fähigkeit ist, um ein produktiver Programmierer zu sein. Wenn ich Bewerber für eine Stelle interviewe, würde ich mich vertiefen, wenn sie sich gezwungen fühlen, ihre Fähigkeiten zur Regulierung ihrer eigenen Person zu verbessern. Warum? Sie werden oft an Orten verwendet, weil sie den richtigen Hammer mögen, aber oft brauchte man einen Schraubenzieher. Suchen Sie in SO nach HTML und Regex, und Sie werden einige Fragen und Gründe sehen, warum Regex ein Außenseiter ist.

Die Fähigkeit, die richtige OOD durchzuführen, ist erforderlich, bevor ich mich für die Einstellung eines Befragten aussprechen werde, der Kenntnisse über reguläre Ausdrücke besitzt. Und ich glaube nicht, dass irgendjemand glaubt, dass Sie ein produktiverer Programmierer sind, der Regex kennt, aber in Bereichen wie Analyse, Design und Kenntnis des verwendeten Frameworks fehlt

Sicher, manchmal sind sie praktisch, aber in meinen mehr als 20 Jahren als professioneller Entwickler habe ich sie weniger als 20 Mal im Code verwendet (und ich habe sogar ein paar Perl-Skripte codiert). Ich benutze sie regelmäßig, um zu suchen und aber ersetzen.

Rune FS
quelle
Programmierer, die reguläre Ausdrücke nicht kennen, erzeugen oft einen großen Stapel WTF, wenn ein regulärer Ausdruck sehr gut funktioniert. Programmierer, die NUR reguläre Ausdrücke kennen, erzeugen häufig einen kleineren, aber stark inkorrekten Stapel von WTF, der versucht, nicht reguläre Sprachen (z. B. HTML) mit regulären Ausdrücken zu verarbeiten.
Kevin Cline
14

Unabhängig von der Domäne, in der Sie arbeiten, sind reguläre Ausdrücke ein nützliches Hilfsmittel, da die meisten Programmiersprachen als einfacher Text geschrieben sind. Regex ist daher eine großartige Möglichkeit, Ihren Quellcode zu manipulieren und umzugestalten, und es ist in viele Texteditoren integriert. Ich habe unzählige Programmierer gesehen, die wiederholt Änderungen an Quelldateien vorgenommen haben, wenn ein regulärer Ausdruck die Änderungen viel schneller und genauer ausführen würde.

Dies ist, worüber Kapitel 3 des Pragmatischen Programmierers spricht, wobei Klartext der "Grundrohstoff der Programmierung" ist.

JohnTESlade
quelle
Warum verwenden Sie nicht einfach eine Idee, die Refactoring unterstützt?
NimChimpsky
2
Wenn ich die Frage in diesem Beitrag gestellt hätte, hätte ich Ihnen das Häkchen gegeben. Dies ist der wichtigste Grund, warum ich niemals jemanden einstellen würde, der Regex nicht kennt. Es ist ein leistungsstarkes Tool für die Codebearbeitung und die Protokollsuche, selbst wenn Sie nie eine einzige Codezeile schreiben müssen, in der es verwendet wird. Jemand, der nicht weiß, dass es bei bestimmten täglichen Aufgaben um Größenordnungen weniger effizient sein wird.
Ben Lee
10

Jeff Atwood hat einen großartigen Blog über reguläre Ausdrücke geschrieben, in dem es dieses erstaunliche Zitat gibt:

Some people, when confronted with a problem, think "I know, I'll use regular 
expressions." Now they have two problems. [Jamie Zawinski]

Es gibt auch eine gute Antwort auf eine gute Frage nach einem Stapelüberlauf, den Sie vielleicht auschecken möchten.

Sie sollten definitiv ein wenig darüber wissen. Reguläre Ausdrücke sind leicht zu lernen, aber schwer zu beherrschen. Sie müssen nicht alles darüber lernen, um es zu verwenden. Sei einfach vernünftig dabei.

 

tl; dr

Sie müssen sich mit der Technologie auskennen, damit Sie eine gute Entscheidung treffen können, wann Sie sie einsetzen möchten.

Makach
quelle
8

Ich arbeite in einer eingebetteten Codebasis, für die keine Bibliothek mit regulären Ausdrücken verfügbar ist. Für eine bestimmte Aufgabe waren 275 Codezeilen erforderlich, und es dauerte ungefähr zwei Wochen, um alle Eckfälle zwischen Tester und Entwickler hin und her zu debuggen. Ich habe später eine Funktion geschrieben, mit der ich dasselbe im Rahmen eines Javascript-Dienstprogramms tun kann. Die exakt gleiche Aufgabe, bei der reguläre Ausdrücke verwendet wurden, verwendete 10 Codezeilen und funktionierte in etwa 15 Minuten einwandfrei.

Haben Sie brauchen reguläre Ausdrücke? Technisch nicht, aber es ist töricht, absichtlich kein so effizientes Tool zu kennen.

Karl Bielefeldt
quelle
6

um eine andere Antwort zu zitieren:

Reguläre Ausdrücke sind eine sehr knappe Methode, um die Übereinstimmung von Mustern im Text auszudrücken.

Wenn dies ein wichtiger Teil Ihrer Arbeit ist, gibt es wahrscheinlich eine bessere Möglichkeit, das von Ihnen entwickelte System zu entwerfen. Es sei denn, viel Text ist bereichsspezifisch (z. B. Bioinformatik).

Ich habe an drei verschiedenen Unternehmenssystemen gearbeitet (in zehn Jahren bei drei verschiedenen Unternehmen) und diese weniger als fünf Mal geschrieben. Dazu gehört das zweimalige Kopieren und Einfügen eines einfachen E-Mail-Validators.

NimChimpsky
quelle
2
Viel Text ist immer domänenspezifisch. Sie sind doch Programmierer . Text (in Form von Quellcode) ist Ihre Domain. Die effiziente Bearbeitung von Text mit regulären Ausdrücken macht Sie zu einem effizienteren Programmierer.
Quanticle
2
@quanticle das macht keinen Sinn. Sie manipulieren Ihren Quellcode tatsächlich mit regulären Ausdrücken? Das klingt nach einem absoluten Albtraum. Reguläre Ausdrücke sind Teil Ihres Codes und Ihr Code interagiert mit domänenspezifischen Daten.
NimChimpsky
3
Ich manipuliere Quellcode mit regulären Ausdrücken. Das Refactoring großer Codestücke von Hand ist mühsam und fehleranfällig. Die Verwendung eines Editors, der das Suchen und Ersetzen von regulären Ausdrücken unterstützt (Hinweis: Nahezu jeder Editor unterstützt das Suchen und Ersetzen von regulären Ausdrücken), erleichtert die Umgestaltung erheblich.
Quanticle
3
@Dunk er sagt nicht, dass es ein großer Effizienzgewinn über die gesamte Laufzeit eines Projekts ist, sondern dass es ein großer Gewinn über einen kurzen Zeitraum sein kann. Ich habe auch Umgestaltungen vorgenommen, bei denen Hunderte oder sogar Tausende von Änderungen in Dutzenden von Dateien vorgenommen wurden. Während der gesamten Laufzeit des Projekts sind die eingesparten Stunden unbedeutend, aber ich wollte mir sicherlich nicht die Stunden oder Tage nehmen, die nötig gewesen wären, um die gleichen Änderungen von Hand vorzunehmen. Moderne IDEs können einen Teil davon für Sie erledigen, ohne dass Sie einen regulären Ausdruck schreiben. Manchmal ist dies jedoch nicht möglich (z. B. Neuverdrahtung eines allgemeinen Zuweisungsmusters).
Jmoreno
2
@NimChimpsky Regexps arbeiten überall. IDEs und Refactoring-Tools funktionieren nur für bestimmte Sprachen. Kann ich mit Ihrem Refactoring-Tool beispielsweise alle meine Vorlagen durchsuchen und eine Zeichenfolge suchen / löschen, die wie eine Telefonnummer aussieht ( sites.google.com/site/steveyegge2/… )?
Quanticle
4

Reguläre Ausdrücke können als sehr nützliches, sprachen- und plattformübergreifendes Verarbeitungswerkzeug angesehen werden. Ich kann reguläre Ausdrücke in meinem Code verwenden, ich kann reguläre Ausdrücke in meinem Editor verwenden, ich kann reguläre Ausdrücke in der Befehlszeile verwenden!

Es ist nicht nur so, dass Sie sie brauchen oder lernen sollten. Es ist eher so

BEEINDRUCKEND! ICH LIEBE REGEX!

Xeoncross
quelle
4

Sie müssen nicht alle kleinen Regex-Macken auswendig können, um ein großartiger Programmierer zu sein, zumal sie alle dazu neigen, sich je nach Implementierung und Programmiersprache zu unterscheiden. Was Sie wissen müssen, ist

  • Was sind reguläre Ausdrücke und reguläre Ausdrücke?
  • Welche Art von Dingen erledigen sie effizient (Analysieren regulärer Sprachen)?
  • Welche Art von Dingen sind unzureichend?
  • Wo Sie Informationen zur Syntax erhalten, wenn Sie eine lesen oder schreiben müssen.

Auf jeden Fall müssen Sie sich nicht einmal zu viele Gedanken darüber machen, ob es zu aufwendig ist, sie überhaupt erst zu lernen. Die einfachstenen Operatoren ( ., *, |, ()usw.) sind fast überall vorhanden und gehen langen Weg!

hugomg
quelle
Ich denke, das ist ein wirklich guter Punkt. Es ist nur mäßig hilfreich zu wissen, wie man Rückverweise und andere erweiterte Funktionen einiger RE-Engines verwendet. In vielen / den meisten Fällen ist es besser lesbar und einfacher, die Verwendung von REs mit ein wenig Logik zu kombinieren.
Mark Bessey
3

Wie bereits erwähnt ist Regex ein Tool , ein meiner Meinung nach sehr nützliches Tool.

Betrachten Sie dieses Beispiel:

//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
} 

Nur eine Zeile, um beispielsweise eine Zahl wie diese 1000000.00 in "1,000,000.00" umzuwandeln

Die Verwendung einer anderen Methode ist weitaus komplexer

emont01
quelle
2
und das ist nicht komplex? Hierbei werden einige Sonderfunktionen verwendet, die nicht im regulären Regex-Satz enthalten sind. Eine einfache Länge und Füllung würde dafür gut passen
Ratschenfreak
2

Es ist kein Muss. Sie müssen sich nur ihrer Existenz bewusst sein und wissen, wann Sie sie verwenden müssen. Syntaxspezifikationen sind mit Google und Online-Tools leicht zu finden und zu ermitteln.

Den
quelle
2

Ich würde dir wirklich raten, reguläre Ausdrücke zu lernen. Bei der Arbeit, wenn wir Programmierer einstellen, werden die Kandidaten, die Regexp nicht kennen, im Allgemeinen schnell entsorgt. Nicht weil sie unbedingt reguläre Ausdrücke kennen müssen, sondern weil dies ein sehr guter Indikator für ihr Verständnis von Programmierung und Programmiersucht ist.

Ein echter Programmierer kennt ihre regulären Ausdrücke

Dies ist jedoch ein wenig voreingenommen, da ich hauptsächlich mit Web-Programmierung befasst bin, bei der reguläre Ausdrücke sowohl auf der Server- als auch auf der Client-Seite häufig vorkommen. Wenn Sie ein Assemblerprogrammierer für ein eingebautes System in einem Geschirrspüler wären, würden Sie wahrscheinlich überhaupt nicht auf reguläre Ausdrücke stoßen. Dies ist jedoch möglicherweise immer noch nützlich, da Sie in den meisten Fällen besser mit Ihrer Entwicklungsumgebung umgehen können, wenn Sie mit regulären Ausdrücken (Suchen und Ersetzen, Suchen nach einer Datei, Suchen in mehreren Dateien usw.) vertraut sind.

Außerdem fällt es Ihnen leichter, von anderen Programmierern anerkannt zu werden, wenn Sie es wissen.

Aron Cederholm
quelle
Außerdem ist es vergeblich, am Anfang die vollständigen Spezifikationen auswendig zu lernen, da es viele verschiedene Dialekte gibt. Versuchen Sie stattdessen, sich auf das Erlernen der Grundlagen zu konzentrieren: (1) Erstellen Sie ein paar einfache reguläre Ausdrücke und lernen Sie die Bedeutung von. * + {} [] () und - und ein paar Grundklassen. (2) Versuchen Sie mit einer gegebenen Spezifikation zu verstehen, was in den regulären Ausdrücken passiert, auf die Sie stoßen.
Aron Cederholm
Wofür benutzt du reg exps in deinem Web-Entwickler? Es ist das, was ich mache und ich habe es in 10 Jahren + 5 Mal benutzt.
NimChimpsky
Für den Anfang: Analysieren oder Validieren von Benutzereingaben (z. B. E-Mail, Postleitzahl, Benutzersuchformulare). Aber auch für I18n- und I10n-Zwecke für benutzerdefinierte und variable Übersetzungszeichenfolgen in mehreren Sprachen / Gebietsschemas. Und sie haben mit Sicherheit die Hilfe bei der Fehlererkennung und einer Menge Fehlerbehandlung erhalten. Und in der CMS / Blogs / Kommentare Welt für Wiki / Forum Markup. Für externe Daten (Benutzereingaben, verschrottete Seiten, synchronisierte Ressourcen usw.) Analysieren, Verarbeiten und Umschreiben von Inhalten / Links / was auch immer. Plus für alle eine Menge Statistiken Zwecke und Protokollierungen (Browser-Erkennung, Referer Sortierung, ...)
Aron Cederholm
-1 für solch einen wahnsinnig unwissenden Kommentar "Ein echter Programmierer ..."
Dunk
Es ist eine eher oberflächliche Methode, Benutzereingaben zu überprüfen, und ich wäre überrascht, wenn Ihre Regex-Werte zu 100% korrekt wären (die E-Mail-Überprüfung ist die berühmte). Und ich verstehe diese "benutzerdefinierten und variablen Übersetzungszeichenfolgen in mehreren Sprachen / Gebietsschemas" nicht, die Sie mit Regex zwischen Sprachen übersetzen - er wtf? Statistikzwecke - Sie machen Statistiken mit regulären Ausdrücken? Das Umschreiben von Links / Inhalten mit Regex klingt für mich wie ein Codegeruch.
NimChimpsky
1

Ist es ein Muss? Sie wissen bereits, was Sie wissen MÜSSEN: dass sie existieren, was sie sind und wofür sie verwendet werden. Ihre Aufgabe als Programmierer ist es, Probleme zu lösen. Sie wissen jetzt genug, um sie in Ihre Lösung zur Lösung Ihres Problems einzubeziehen. Solltest du Regex lernen? Absolut. Die Priorität liegt bei Ihnen ... es gibt Jobs, bei denen sie jeden Tag verwendet werden, und Jobs, bei denen sie niemals verwendet werden. Ein einfacher Leitfaden wäre, wie viel Muster für die Probleme benötigt wird, auf die Sie voraussichtlich stoßen werden.

jmoreno
quelle
1

Hmm, ich muss diese Liste von Strings durch Kommas trennen und ausgeben, ich muss eine Funktion schreiben, die eine for-Schleife enthält, die ein Separator-Argument annimmt, und sie weiterhin zusammenfügen ... oder ich könnte einfach diesen vorhandenen 'join'-Befehl verwenden.

Ich muss diese komplexen Objekte anhand einiger Attribute sortieren, die jedes Objekt besitzt. Lassen Sie mich daran erinnern, wie ich eine Sortierfunktion schreibe, die dies ermöglicht. Oh nein, ich kann einfach die vorhandene Standardsortierfunktion verwenden, die diese Sprache unterstützt. Ich muss lernen, wie man einen benutzerdefinierten Komparator schreibt, aber es sollte nicht zu schwierig sein, es ist offensichtlich besser, als meine eigene Sortierfunktion beizubehalten.

Ich habe ein bisschen Angst vor der Idee von virtuellen Methoden, aber es sollte mir helfen, diese Listen, jeweils für einen anderen Elementtyp, auf eine einzige Liste zu reduzieren. Dann muss ich nicht ein halbes Dutzend ähnlicher Anweisungen schreiben, die jede Liste auf unterschiedliche Weise verarbeiten. Ich denke, ich sollte mich intensiv mit diesen Dingen befassen und sie lernen, da mein Code dadurch viel einfacher und sauberer wird.

Ich muss aus dieser Textdatei diese Paare von Wörtern und Werten extrahieren, um all das Rauschen zu unterdrücken. Lassen Sie mich einen fünfzigzeiligen Parser schreiben, um die Zeichen einzeln zu lesen Auf der Suche nach setze ich diese Statusvariable und beginne damit, sie anders zu analysieren usw. Natürlich ist mein Fall so speziell, dass niemand zuvor auf ein solches Problem gestoßen ist und eine generische Lösung erfunden hat, die eine Zeile umfasst Code, um es zu tun. Das erinnert mich daran, dass ich die Programmbücher, die ich nie gelesen habe, in den Antiquariat bringen sollte.

Benedikt
quelle
1

Kurze Antwort: Nein, aber ... Wissen ist Macht.

Ich bin ein Webentwickler und finde, dass alle regulären Ausdrücke, die ich im Allgemeinen benötige, bereits für mich geschrieben wurden. Ich hatte jedoch Probleme beim Kopieren und Einfügen und habe nicht bemerkt, was es tat oder nicht, was die Gefahr des Kopierens und Einfügens von ALLEM ist.

Ein Beispiel: Ein E-Mail-Ausdruck, den ich kopiert und eingefügt habe, hat in einer E-Mail, die in der E-Mail-Adressangabe zulässig ist, einen Punkt oder ein Plus nicht zugelassen. Tatsächlich verwenden viele Leute Google Mail mit [email protected], so dass es einfach wird, "Site-Name" zu filtern, falls sie sich für Spam entscheiden.

TheDPQ
quelle
0

Reguläre Ausdrücke? Hmmm ... manchmal ist es nützlich, sie zu kennen, aber meistens verwenden Sie immer die gleichen. Ich habe schon oft Regex benutzt, aber ich würde nicht sagen, dass ich damit gut bin. Ich mag es überhaupt nicht und ich denke, es gibt wichtigere Dinge zu wissen als Regex.

Aber bei der Validierung von Formularen oder Daten ist es sehr nützlich. Ich denke fast jede Berufsform wird mit Regex validiert. ASP.NET verwendet es.

Aber überhaupt: Versuchen Sie, einen Ausdruck zu erstellen, wenn Sie ihn benötigen, und speichern Sie ihn. Sie werden sie hoffentlich alle mehrmals verwenden. Verschwenden Sie aber nicht Ihre Zeit mit RegEx!

Smokefoot
quelle
0

Dies hängt von dem Bereich / der Plattform ab, in dem / der Sie arbeiten

  1. Für Desktop-Anwendungen können Sie ein kooles Leben führen, ohne etwas über reguläre Ausdrücke zu wissen. Aber wohlgemerkt, Visual Studio hat eine Suche nach regulären Ausdrücken, aber ich frage mich, ob jemand sie regelmäßig verwendet. Ich denke nicht (Sie müssen zuerst Ihren regulären Ausdruck korrigieren, weil Sie eine Suche durchführen können :)).

  2. Als Webentwickler müssen Sie höchstwahrscheinlich den regulären Ausdruck lernen. Sie können damit durchkommen, weil Sie leicht Code-Schnipsel online finden können, die ausreichen, Sie brauchen, aber Lernen wird helfen.

Es gibt Bereiche wie Dokumentation, Rechtsstreitigkeiten und Rechtsfragen, in denen der reguläre Ausdruck ein unverzichtbares Werkzeug ist. Du musst es wissen. Wenn nicht, kriegt man den Job einfach nicht.

Kurz gesagt, wenn es nicht Teil einer Stellenbeschreibung ist, kümmern Sie sich nicht einmal darum. Wenn Sie es lernen möchten, lernen Sie es zum Spaß.

Noname
quelle
0

Reguläre Ausdrücke sind ein sehr nützliches Werkzeug, und es gibt viele Situationen, in denen Programmierer sie verwenden sollten. Sie sollten sie nicht alle auswendig lernen. Verwenden Sie einfach die Referenz und erledigen Sie Ihre Aufgabe. Nach 10-20-50-100 (abhängig vom Programmierer) Aufgaben, bei denen Sie reguläre Ausdrücke verwendet haben, kennen Sie sie alle auswendig. Sie werden von selbst gelernt, Sie sollten sie nicht speziell lernen.

Larry Cinnabar
quelle
0

Ich sehe bereits viele Antworten auf diese Fragen, aber es scheint, als würden sie alle die Vorteile der Kenntnis regulärer Ausdrücke als Werkzeug in der Toolbox des Programmierers haben.

Ich stelle mir reguläre Ausdrücke viel lieber als Wissen vor, das das Verständnis der Funktionsweise von Computern erweitert. Sobald jemand wirklich versteht, was eine reguläre Sprache ist und dass man sie mit drei einfachen Operationen ausdrücken kann, gibt es meiner Meinung nach mehr als nur ein Werkzeug zum Validieren einfacher Zeichenfolgen.

Sie können das Parsen im Allgemeinen besser verstehen, was für nahezu jede Art von Programmierung nützlich ist, und besser verstehen, wie die von uns regelmäßig verwendeten Tools (Compiler, Editor, Browser usw.) funktionieren.

Der praktische Nutzen der Verwendung regulärer Ausdrücke ist natürlich enorm. Auch wenn Sie nicht mit ihnen "programmieren" - ich verwende reguläre Ausdrücke, die ständig in meinem Editor suchen / ersetzen, und messe, wie viel produktiver sie mich machen.

Also, obwohl es nicht notwendig ist, denke ich, dass es eines der ersten Werkzeuge ist, die ein Programmierer lernen sollte.

Avi
quelle
0

Rob Pike glaubt das nicht :

Reguläre Ausdrücke sind schwer zu schreiben, schwer gut zu schreiben und können im Vergleich zu anderen Technologien teuer sein. Standard-Lexing- und -Parsing-Techniken sind so einfach zu schreiben, so allgemein und so anpassungsfähig, dass es keinen Grund gibt, reguläre Ausdrücke zu verwenden.

Eine andere Sichtweise ist, dass Lexer und Parsing zu statisch definierten Mustern passen. Die Stärke regulärer Ausdrücke besteht jedoch darin, dass sie eine Möglichkeit bieten, Muster dynamisch auszudrücken. Sie eignen sich hervorragend für Texteditoren und Suchwerkzeuge. Wenn Sie jedoch zum Zeitpunkt der Kompilierung wissen, wonach Sie suchen, bieten reguläre Ausdrücke weitaus mehr Allgemeingültigkeit und Flexibilität, als Sie benötigen.

Reguläre Ausdrücke als Allheilmittel für alle Textverarbeitungsprobleme zu fördern, ist nicht nur faul und mangelhaft, sondern verstärkt auch ihre Verwendung durch Personen, die sie überhaupt nicht verwenden sollten.

Es ist erwähnenswert, dass Pike anerkennt, dass sie natürlich einen Platz haben, und IMHO, reguläre Ausdrücke sind ein ziemlich mächtiges Werkzeug, das die Zeit, die ich mit dem Lernen verbracht habe, absolut belohnt. Unter diesem Gesichtspunkt würde ich das Lernen absolut empfehlen Sie. Aber es ist möglich, dass das eigentliche Problem darin besteht, dass es sich um ein Pflaster handelt, mit dem ich weniger über das Lexen und Parsen wissen konnte, als ich sollte. :)

Weston C
quelle
0

Lassen Sie mich nur sagen, reguläre Ausdrücke sind oft das richtige Werkzeug für den Job und sehr praktisch, insbesondere bei Anwendungen, die viel Text verarbeiten. Es ist jedoch Wahnsinn, sie auswendig zu lernen. Ich habe einen Spickzettel an meiner Wand, der alle Sonderzeichen, Anker, Zeichenklassen, Mustermodifikatoren und Metazeichen enthält. Nehmen Sie sich nur 20 Minuten Zeit, um zu lernen, wie man sie verwendet, und einen Spickzettel zum Aufbewahren alles andere verfolgen. Alles, was Sie dazu benötigen, ist, in der Lage zu sein, einen regulären Ausdruck zu schreiben, wenn Sie einen benötigen, normalerweise etwa alle 6 Monate - ungefähr so ​​oft, wie Sie auf ein Problem stoßen, bei dem sie das beste Werkzeug für den Job sind. Es sei denn, Sie sind Mitglied des Perl-, Latex-, Emacs- oder eines anderen Teams für schwere Textverarbeitung.

Jonathan Henson
quelle