it-swarm.com.de

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

Ich bin neu in der Programmierung und habe bei einem Interview eine Frage zu regulären Ausdrücken bekommen. Ich konnte natürlich nicht antworten. Also habe ich mich gefragt, ob ich regulären Ausdruck lernen soll? Ist es ein Muss für jeden Programmierer aller Bereiche? Oder ist es ein Muss für die Programmierung für bestimmte Bereiche?

Verwandte Fragen:

83
user

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 untersuchen. Wenn Sie jemanden interviewen, der jahrelange Erfahrung beansprucht und diese nicht versteht, müssen Sie weiter graben.

113
ptyx

Reguläre Ausdrücke sind ein Werkzeug. Es ist ein sehr nützliches Werkzeug, daher lernen viele Menschen, wie man es benutzt. Es gibt jedoch keine "Anforderung" für Sie, den Umgang mit diesem speziellen Tool zu erlernen, ebenso wenig wie eine "Anforderung" für Sie, etwas anderes zu lernen.

54
eykanal

Es würde mich nicht wundern, wenn zum Beispiel ein Spieleprogrammierer oder ein Programmierer am LHC keine regulären Ausdrücke gelernt hätte. Ich könnte sogar einem Spieleprogrammierer einen Pass geben, wenn er 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 kennen würde. Es gibt verschiedene Disziplinen von Programmierern, jedoch müssen wir unter die "Informationen" fallen Systeme "Regenschirm.

33
Jonathan Rich

Reguläre Ausdrücke sind eine sehr knappe Methode, um auszudrücken, wie Muster im Text abgeglichen werden.

Die Anforderung, Daten aus Text zu analysieren und zu extrahieren oder zu überprüfen, ob ein Text einem bestimmten Muster entspricht, kommt bei der Programmierung sehr häufig vor. Daher würde ich sagen, dass es wichtig ist, diese zu kennen und zu verstehen.

Sie sind ein gutes Werkzeug in Ihrer Toolbox, und ich würde erwarten, dass jeder erfahrene Programmierer weiß, wie man sie verwendet.

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

Sie können mit dem Tutorial at reguläre-Ausdrücke.info beginnen.

22
Oded

Im Gegensatz zu den meisten Antworten hier denke ich nicht, dass Kenntnisse über Reg-Exs eine notwendige Fähigkeit sind, um ein produktiver Programmierer zu sein. Wenn ich Kandidaten für eine Position interviewe, würde ich tiefer graben, wenn sie sich gezwungen fühlen würden, ihre Reg-Fähigkeiten selbst zu verbessern. Warum? Sie werden oft an Orten verwendet, weil sie den richtigen Hammer mögen, aber oft brauchte man einen Schraubenzieher. Suchen Sie SO nach HTML und Regex und Sie werden einige Fragen und einige Gründe sehen, warum Regex eine Fehlanpassung ist.

Die Fähigkeit, eine ordnungsgemäße OOD durchzuführen, ist erforderlich, bevor ich mich für die Einstellung eines Befragten einsetzen werde. Die Kenntnis der regulären Ausdrücke ist dies sicherlich nicht. Und ich glaube nicht, dass irgendjemand glaubt, dass Sie ein produktiverer Programmierer sein können, der Regexs 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.

15
Rune FS

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 vornehmen würde.

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

14
JohnTESlade

Jeff Atwood hat ein großartiges Blog über reguläre Ausdrücke geschrieben, darin gibt es dieses erstaunliche Zitat:

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 einen gute Antwort auf eine gute Frage einen Stapelüberlauf, den Sie möglicherweise überprüfen möchten.

Sie sollten auf jeden Fall 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.

tl; dr

Sie müssen über die Technologie Bescheid wissen, damit Sie eine gute Entscheidung treffen können, wann Sie sie verwenden möchten.

10
Makach

Ich arbeite in einer eingebetteten Codebasis, für die keine Bibliothek für reguläre Ausdrücke verfügbar ist. Eine bestimmte Aufgabe erforderte 275 Codezeilen und es dauerte ungefähr zwei Wochen, um alle Eckfälle zwischen Tester und Entwickler zu debuggen. Ich habe später eine Funktion geschrieben, um dasselbe als Teil eines Javascript-Dienstprogramms zu tun. Die genaue gleiche Aufgabe mit regulären Ausdrücken verwendete 10 Codezeilen und funktionierte in etwa 15 Minuten perfekt.

Benötigen Sie brauchen reguläre Ausdrücke? Technisch nicht, aber es ist dumm, absichtlich ein so effizientes Werkzeug nicht zu kennen.

8
Karl Bielefeldt

um eine andere Antwort zu zitieren:

Reguläre Ausdrücke sind eine sehr knappe Methode, um auszudrücken, wie Muster im Text abgeglichen werden.

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 domänenspezifisch für Ihre Region (z. B. Bioinformatik).

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

6
NimChimpsky

Reguläre Ausdrücke können als ein sehr nützliches, sprachübergreifendes, plattformübergreifendes Verarbeitungswerkzeug angesehen werden. Ich kann Regex in meinem Code verwenden, ich kann Regex in meinem Editor verwenden, ich kann Regex in der Kommandozeile verwenden!

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

BEEINDRUCKEND! ICH LIEBE REGEX!

4
Xeoncross

Sie müssen nicht alle kleinen Regex-Macken auswendig kennen, um ein großartiger Programmierer zu sein, zumal sie alle in Bezug auf verschiedene Implementierungen und Programmiersprachen ein wenig variieren. Was Sie tun müssen , müssen Sie wissen

  • Was sind reguläre Ausdrücke und reguläre Ausdrücke?.
  • Welche Art von Dingen erledigen sie effizient (Parsen regulärer Sprachen)
  • Welche Art von Dingen sind unzulänglich (Analyse verschachtelter Inhalte unter Verwendung von Tonnen von Rückreferenzen)?
  • Wo Sie Informationen zur Syntax erhalten, wenn Sie eine lesen oder schreiben müssen.

Wie auch immer, Sie müssen sich nicht einmal zu viele Sorgen machen, ob es zu viel Mühe kostet, sie überhaupt zu lernen. Die einfachsten Operatoren (., *, |, (), etc) sind fast überall präsent und gehen einen langen Weg!

4
hugomg

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

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

3
emont01

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

2
Den

Ich würde Ihnen wirklich raten, Regexps 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 seine regulären Ausdrücke

Dies ist jedoch ein wenig voreingenommen, da ich hauptsächlich in der Webprogrammierung tätig bin, wo reguläre Ausdrücke sowohl auf der Serverseite als auch auf der Clientseite häufig vorkommen. Wenn Sie ein Assembly-Programmierer für ein eingebautes System in einer Spülmaschine wären, würden Sie wahrscheinlich überhaupt nicht auf reguläre Ausdrücke stoßen. Aber es wäre möglicherweise immer noch nützlich, da Sie in den meisten Fällen besser in der Lage sind, Ihre Entwicklungsumgebung zu nutzen, wenn Sie reguläre Ausdrücke kennen (suchen und ersetzen, nach einer Datei suchen, in mehreren Dateien suchen usw.).

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

2
Aron Cederholm

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

Ich bin ein Webentwickler und finde, dass jeder reguläre Ausdruck, den ich normalerweise brauche, bereits für mich geschrieben wurde. Ich hatte jedoch Probleme beim Kopieren und Einfügen und wusste nicht, was es tat oder nicht, was eine Gefahr für das Kopieren und Einfügen von ALLES darstellt.

Ein Beispiel: Ein E-Mail-Regex, den ich kopiert und eingefügt habe, hat in einer E-Mail, die in der E-Mail-Adressspezifikation zulässig ist, keinen Punkt oder Plus berücksichtigt. Tatsächlich verwenden viele Leute Google Mail mit [email protected], so dass es einfach wird, "Sitename" zu filtern, wenn sie sich für Spam entscheiden.

1
TheDPQ

Hmm, ich muss diese Liste von Zeichenfolgen durch Kommas trennen und ausgeben, eine Funktion mit einer for-Schleife schreiben, die ein Trennzeichen enthält, und sie weiterhin anhängen ... oder ich könnte einfach diesen vorhandenen Befehl 'join' verwenden.

Ich muss nach diesen komplexen Objekten sortieren, basierend auf ein paar Attributen, die jedes Objekt hat. Lassen Sie mich daran erinnern, wie man eine Sortierfunktion schreibt, die das macht. Oh nein, ich kann nur 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 virtueller Methoden, aber es sollte mir helfen, diese Listen, jede 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 hart lernen und diese Dinge lernen, weil mein Code viel einfacher und sauberer sein wird, wenn ich das tue.

Ich muss aus dieser Textdatei diese Wort- und Wertepaare unter all dem anderen Rauschen extrahieren. Lassen Sie mich einen Parser mit fünfzig Zeilen schreiben, um die Zeichen einzeln zu lesen, und wenn eines der Zeichen wie der Anfang von dem aussieht, was ich bin auf der Suche nach werde ich diese Statusvariable setzen und anfangen, sie anders zu analysieren und so weiter usw. Natürlich ist mein Fall so besonders, dass niemand zuvor auf ein solches Problem gestoßen ist und eine generische Lösung erfunden hat, die eine Zeile umfasst von Code, um es zu tun. Das erinnert mich daran, dass ich die Programmierbücher, die ich nie gelesen habe, in den Antiquariat bringen sollte.

1
Benedict

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 Regexs lernen? Absolut. Die Priorität liegt bei Ihnen ... Es gibt Jobs, bei denen sie täglich verwendet werden, und Jobs, bei denen sie niemals verwendet werden. Eine einfache Anleitung wäre, wie viel Muster für die erwarteten Probleme erforderlich ist.

1
jmoreno

Ich sehe bereits viele Antworten darauf, aber bei allen scheint es darum zu gehen, reguläre Ausdrücke als Werkzeug in der Toolbox des Programmierers zu kennen.

Ich stelle mir reguläre Ausdrücke lieber als die Art von Wissen vor, die das Verständnis für die Funktionsweise von Computern erweitert. Sobald jemand wirklich versteht, was eine normale Sprache ist und dass Sie sie mit drei einfachen Operationen ausdrücken können, gibt es ihm meiner Meinung nach etwas, das über ein einfaches Werkzeug zum Validieren einfacher Zeichenfolgen hinausgeht.

Sie werden in der Lage, das Parsen im Allgemeinen besser zu verstehen, was für nahezu jede Art von Programmierung nützlich ist, und besser zu verstehen, wie die Tools, die wir regelmäßig verwenden (Compiler, Editor, Browser usw.), funktionieren.

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

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

0
Avi

reguläre Ausdrücke? Hmmm ... manchmal ist es nützlich, sie zu kennen, aber meistens benutzt man immer das gleiche. Ich habe ziemlich oft Regex verwendet, aber ich würde nicht sagen, dass ich gut damit bin. Ich mag es überhaupt nicht und ich denke, es gibt wichtigere Dinge zu wissen als Regex.

Aber bei der Validierung von Formeln oder Daten ist es sehr nützlich. Ich denke, fast jede professionelle Form 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 mehr als einmal verwenden. Aber verschwenden Sie keine Zeit mit RegEx!

0
Smokefoot

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. Sie auswendig zu lernen ist jedoch Wahnsinn. Ich habe einen Spickzettel an meiner Wand befestigt, der alle Sonderzeichen, Anker, Charakterklassen, Mustermodifikatoren, Metazeichen ... enthält. Nehmen Sie sich einfach die 20 Minuten Zeit, um zu lernen, wie man sie verwendet, und holen Sie sich einen Spickzettel alles andere verfolgen. Alles, wofür Sie sie benötigen, ist, in der Lage zu sein, einen regulären Ausdruck zu schreiben, wenn Sie einen benötigen. Dies geschieht 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 von Perl, Latex, Emacs oder einem anderen starken Textverarbeitungsteam.

0
Jonathan Henson

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

  1. Für Desktop-Anwendungen können Sie ein cooles 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 online einen Code-Ausschnitt finden können, der ausreicht, aber das Lernen hilft.

Es gibt Bereiche wie Dokumentation, Rechtsstreitigkeiten und rechtliche Angelegenheiten, in denen der reguläre Ausdruck ein unverzichtbares Instrument ist. Du musst es wissen. Wenn Sie dies nicht tun, bekommen Sie 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ß.

0
Noname

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 Aufgaben vom 20.10.50-100 (je nach Programmierer), 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.

0
Larry Cinnabar

Rob Pikeglaubt 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 mit statisch definierten Mustern übereinstimmen. 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 beim Kompilieren wissen, wonach Sie suchen, bieten reguläre Ausdrücke weitaus mehr Allgemeinheit und Flexibilität als Sie benötigen.

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

Es ist erwähnenswert, dass Pike natürlich anerkennt, dass sie einen Platz haben, und meiner Meinung nach sind reguläre Ausdrücke ein ziemlich mächtiges Werkzeug, das die Zeit, die ich mit dem Erlernen des Gebrauchs verbracht habe, absolut belohnt, und von diesem Standpunkt aus 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, das es mir ermöglicht hat, weniger über Lexing und Parsing zu wissen, als ich sollte. :) :)

0
Weston C