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:
regular-expressions
Benutzer
quelle
quelle
Antworten:
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.
quelle
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.
quelle
if (!(foo && bar))
=>if (!foo || !bar)
. Vielleicht haben Sie es benutzt und nicht verstanden, oder vielleicht wurde Ihnen nicht das richtige Material beigebracht.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.
quelle
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 .
quelle
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.
quelle
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.
quelle
Jeff Atwood hat einen großartigen Blog über reguläre Ausdrücke geschrieben, in dem es dieses erstaunliche Zitat gibt:
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.
quelle
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.
quelle
um eine andere Antwort zu zitieren:
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.
quelle
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!
quelle
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
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!quelle
Wie bereits erwähnt ist Regex ein Tool , ein meiner Meinung nach sehr nützliches Tool.
Betrachten Sie dieses Beispiel:
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
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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!
quelle
Dies hängt von dem Bereich / der Plattform ab, in dem / der Sie arbeiten
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 :)).
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ß.
quelle
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.
quelle
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.
quelle
Rob Pike glaubt das nicht :
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. :)
quelle
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.
quelle