È necessario per ogni programmatore imparare le espressioni regolari? [chiuso]

80

Sono nuovo nella programmazione e in un'intervista ho avuto una domanda sulle espressioni regolari; inutile dire che non potrei rispondere. Quindi mi stavo chiedendo se dovrei imparare l'espressione regolare? È un must per ogni programmatore di tutti i campi? O è un must per la programmazione per alcuni campi particolari?

Domande correlate:

posta user 12.04.2017 - 09:31
fonte

23 risposte

112

Le espressioni regolari sono uno strumento incredibilmente conveniente, disponibile in così tanti linguaggi che la maggior parte degli sviluppatori apprenderanno prima o poi.

Per un intervistatore, sono un bel modo per sondare l'esperienza durante un'intervista. Se stai intervistando qualcuno che reclama anni di esperienza che non li capisce, devi andare oltre.

    
risposta data 17.08.2012 - 22:02
fonte
54

Le espressioni regolari sono uno strumento. Capita di essere uno strumento molto utile, così tante persone scelgono di imparare come usarlo. Tuttavia, non c'è "obbligo" per te di imparare come usare questo particolare strumento, più di quanto non ci sia un "requisito" per farti imparare qualsiasi altra cosa.

    
risposta data 08.02.2012 - 17:47
fonte
33

Non sarei sorpreso se, ad esempio, un programmatore di giochi o un programmatore dell'LHC non imparassero mai le espressioni regolari. Potrei anche dare a un programmatore di giochi un passaporto per non sapere SQL.

Tuttavia, se lavori su sistemi di informazione di qualsiasi tipo e se non conosci le espressioni regolari, stai facendo un cattivo servizio.

D'altra parte, non mi aspetterei che il programmatore IS standard conoscesse la matematica della matrice che avrebbe un programmatore di giochi. Ci sono diverse discipline di programmatore, tuttavia dobbiamo cadere sotto l'ombrello dei "sistemi di informazione".

    
risposta data 08.02.2012 - 17:59
fonte
22

Le espressioni regolari sono un modo molto preciso per esprimere come abbinare i pattern nel testo.

Il requisito di analizzare ed estrarre i dati dal testo o di convalidare che un testo sia conforme a uno schema specifico si presenta molto spesso in fase di programmazione, quindi direi che sì, è importante conoscerli e comprenderli.

Sono un buon strumento da avere nella tua casella degli strumenti e mi aspetto che ogni programmatore esperto sappia come usarli.

Una delle migliori risorse per conoscere le espressioni regolari è il libro di Jeffery Friedl, Mastering delle espressioni regolari . È piuttosto avanzato, quindi potresti voler leggerlo quando hai avuto più esperienza.

Puoi iniziare con tutorial su regular-expressions.info .

    
risposta data 08.02.2012 - 17:55
fonte
15

Contrariamente alla maggior parte delle risposte qui, non credo che la conoscenza dei registri sia un'abilità richiesta per essere un programmatore produttivo. Quando intervisto i candidati per una posizione, scaverei più a fondo se si sentissero obbligati a portare le loro abilità nel reggersi da soli. Perché? sono spesso usati in posti perché a loro piace il martello giusto, ma spesso quello di cui avevi bisogno era un cacciavite. Cerca SO per HTML e regex e vedrai un bel po 'di domande e alcuni motivi per cui regex è un disadattato.

La capacità di fare OOD corretta è richiesta prima che sosterrà per assumere un intervistato la conoscenza delle espressioni regolari non lo è. E in realtà non penso che nessuno creda di poter essere un programmatore più produttivo conoscendo le regex ma mancando di aree come l'analisi, il design e la conoscenza del framework usato

Certo, a volte sono a portata di mano, ma in più di 20 anni come sviluppatore professionista penso di averli usati meno di 20 volte in codice (e ho anche codificato alcuni script perl) li uso regolarmente per fai ricerca e sostituisci però.

    
risposta data 08.02.2012 - 21:10
fonte
14

Indipendentemente dal dominio in cui si sta lavorando, le espressioni regolari sono uno strumento utile da sapere perché la maggior parte dei linguaggi di programmazione è scritta come testo normale. Regex è quindi un ottimo modo per manipolare e refactoring il tuo codice sorgente ed è incorporato in molti editor di testo. Ho visto innumerevoli programmatori apportare modifiche ripetute ai file sorgente quando un'espressione regolare avrebbe apportato le modifiche molto più rapidamente e con precisione.

Questo è il capitolo 3 del Pragmatic Programmer in cui il testo semplice è la "materia prima di base della programmazione".

    
risposta data 08.02.2012 - 19:41
fonte
10

Jeff Atwood ha scritto un ottimo blog sulle espressioni regolari, in esso c'è questa citazione sorprendente:

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

C'è anche una ottima risposta a una buona domanda un sovraccarico dello stack che potresti voler controllare.

Dovresti conoscerlo definitivamente un po '. Le espressioni regolari sono facili da imparare ma difficili da padroneggiare. Non è necessario imparare tutto su di esso per iniziare a usarlo. Basta essere sensibili a questo proposito.

tl; dr

Devi conoscere la tecnologia in modo che tu possa prendere una buona decisione su quando usarla.

    
risposta data 23.05.2017 - 14:40
fonte
8

Lavoro in un codice base incorporato che non ha una libreria di espressioni regolari disponibile. Un determinato compito richiedeva 275 linee di codice e impiegava circa due settimane per eseguire il debug di tutti i casi angolari, avanti e indietro tra tester e sviluppatore. In seguito ho scritto una funzione per fare la stessa cosa come parte di un'utilità javascript. La stessa esatta attività utilizzando le espressioni regolari ha utilizzato 10 righe di codice e ha funzionato perfettamente in circa 15 minuti.

hai bisogno di espressioni regolari? Tecnicamente no, ma è sciocco ignorare intenzionalmente uno strumento così efficiente.

    
risposta data 08.02.2012 - 20:49
fonte
6

per citare un'altra risposta:

Regular expressions are a very terse way to express how to match patterns in text.

Quindi, se questa è una parte importante del tuo lavoro, probabilmente c'è un modo migliore per progettare il sistema che stai sviluppando. A meno che un sacco di testo non sia specifico per il dominio della tua area (es. Bioinformatica).

Ho lavorato su tre diversi sistemi aziendali (in tre diverse società nell'arco di dieci anni) e li ho scritti meno di cinque volte e ciò include copia e incolla di due volte un validatore di posta elettronica di base.

    
risposta data 08.02.2012 - 18:04
fonte
4

Le espressioni regolari possono essere pensate come uno strumento di elaborazione cross-language, cross-platform molto utile. Posso usare regex nel mio codice, posso usare regex nel mio editor, posso usare regex sulla riga di comando!

Non è solo che hai bisogno, o dovresti impararli. È più come

WOW! I LOVE REGEX!

    
risposta data 08.02.2012 - 19:29
fonte
4

Non è necessario conoscere a memoria tutti i piccoli capricci di regex per essere un grande programmatore, specialmente perché tendono a variare un po 'per implementazioni e linguaggi di programmazione differenti. Quello che fai devi sapere è

  • Che cosa sono le espressioni regolari e regex.
  • Che tipo di cose fanno in modo efficiente (analizzando le lingue regolari)
  • Che tipo di cose sono inefficienti (analizzando roba annidata, usando tonnellate di backreferences)
  • Dove ottenere informazioni sulla sintassi ogni volta che è necessario leggerne o scriverne uno.

Ad ogni modo, non devi nemmeno preoccuparti di molto se non ci vorranno troppo sforzi per impararli in primo luogo. Gli operatori più semplici ( . , * , | , () , ecc.) Sono quasi universalmente presenti e vanno in lungo modo!

    
risposta data 08.02.2012 - 19:58
fonte
3

Come già accennato Regex è uno strumento , uno strumento molto utile IMHO.

Considera questo esempio:

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

Solo una riga per convertire ad esempio un numero come questo 1000000,00 in "1.000.000,00"

L'utilizzo di qualsiasi altro metodo sarà molto più complesso

    
risposta data 08.02.2012 - 21:24
fonte
2

Non è un must. Devi solo essere consapevole della loro esistenza e quando usarli. Gli specifici della sintassi sono facili da trovare e utilizzare correttamente con Google e strumenti online.

    
risposta data 09.02.2012 - 13:05
fonte
2

Ti consiglio davvero di imparare le espressioni regolari. Al lavoro, quando assumiamo programmatori, i candidati che non conoscono regexp vengono generalmente eliminati rapidamente. Non perché abbiano assolutamente bisogno di conoscere le espressioni regolari, ma perché è un ottimo indicatore del loro livello di comprensione della programmazione e del livello di dipendenza della programmazione.

Un vero programmatore conosce le sue espressioni regolari

Questo è un po 'di pregiudizio, tuttavia, dato che sono principalmente coinvolto nella programmazione web, dove le espressioni regolari sono qualcosa che devi assolutamente incontrare, sia dal lato server che dal lato client. Se tu fossi un programmatore di assemblaggi per un sistema integrato in una lavastoviglie, probabilmente non ti verrebbe in mente alcuna espressione regolare. Ma potrebbe ancora tornare utile, dato che nella maggior parte dei casi sei in grado di maneggiare il tuo ambiente di sviluppo quando conosci le espressioni regolari (cerca e sostituisci, cerca un file, cerca in più file, ecc ...). / p>

Inoltre, troverai più facile essere riconosciuto da altri programmatori se lo conosci.

    
risposta data 28.02.2012 - 03:19
fonte
1

È obbligatorio? Sai già cosa DEVI sapere: che esistono, che cosa sono e per cosa sono usati. Il tuo lavoro come programmatore è risolvere i problemi. Ora ne sai abbastanza per iniziare a prenderli in considerazione nella tua soluzione per risolvere il tuo problema. Dovresti imparare regexs? Assolutamente. La priorità spetta a te ... ci sono posti di lavoro in cui saranno utilizzati tutti i giorni e lavori in cui non saranno mai utilizzati. Una guida semplice sarebbe la quantità di pattern che corrisponde ai problemi che ci si aspetta di incontrare.

    
risposta data 09.02.2012 - 08:35
fonte
1

Hmm, ho bisogno di virgola-separare e generare questo elenco di stringhe, lascia che io scriva una funzione che contiene un ciclo for che accetta un argomento separatore e continua ad aggiungerli insieme ... o potrei semplicemente usare questo 'join' esistente comando.

Ho bisogno di ordinare questi oggetti complessi sulla base di un paio di attributi che ogni oggetto ha, permettimi di ricordare a me stesso come scrivere una funzione di ordinamento che lo faccia, oh no aspetta, posso semplicemente usare la funzione di ordinamento standard esistente che questa supporti linguistici. Dovrò imparare come scrivere un comparatore personalizzato ma non dovrebbe essere troppo difficile, ovviamente è meglio che mantenere la mia funzione di ordinamento.

Sono un po 'spaventato dall'idea dei metodi virtuali, ma dovrebbe aiutarmi a ridurre questi elenchi, ognuno per un diverso tipo di oggetto, fino a un unico elenco. Quindi non devo scrivere una mezza dozzina di dichiarazioni simili che elaborano ciascuna lista in un modo diverso. Credo che dovrei studiare molto e imparare quelle cose perché il mio codice sarà molto più semplice e più pulito se lo faccio.

Ho bisogno di estrarre da questo file di testo queste coppie di parole e valori tra tutto questo altro rumore, lasciatemi scrivere un parser di cinquanta righe per leggere i caratteri uno per uno e se uno dei caratteri sembra l'inizio di ciò Sto cercando di impostare questa variabile di stato e iniziare l'analisi in modo diverso e così via ecc ... ovviamente il mio caso è ovviamente così speciale che nessun altro ha mai incontrato un problema come questo e ha inventato una soluzione generica che prende una riga di codice per farlo. Questo mi ricorda che dovrei prendere quei libri di programmazione che non ho mai letto nel negozio di libri usati.

    
risposta data 09.02.2012 - 13:15
fonte
1

Risposta breve: No, ma ... la conoscenza è potere.

Sono uno sviluppatore web e trovo che qualsiasi espressione regolare di cui ho bisogno in generale è già stata scritta per me. Tuttavia ho avuto problemi con il copiare e incollare e non rendermi conto di cosa stava facendo o meno, il che è un rischio di copiare e incollare QUALSIASI COSA.

Un esempio: una regex di e-mail che ho copiato e incollato non ha consentito un periodo o un vantaggio in un'e-mail che è consentita nelle specifiche dell'indirizzo e-mail. Infatti molte persone usano gmail con [email protected] in modo che sia facile filtrare "sitename" nel caso in cui scelgano di fare spam.

    
risposta data 10.02.2012 - 17:32
fonte
0

espressioni regolari? Hmmm ... a volte è utile conoscerli ma la maggior parte delle volte usi sempre la stessa cosa. Ho usato la regex abbastanza spesso, ma non potrei dire che sono bravo con esso. Non mi piace per niente e penso che ci siano cose più importanti da sapere rispetto alla regex.

Ma nella validazione di formule o dati è molto utile. Penso che ogni forma professionale sia convalidata dalla regex. ASP.NET che lo utilizza.

Ma niente: prova a fare un'espressione quando ne hai bisogno e salvala. Li userete con speranza tutti più di una volta. Ma non perdere tempo con RegEx!

    
risposta data 08.02.2012 - 17:56
fonte
0

Dipende dall'area / piattaforma su cui stai lavorando

  1. Per le applicazioni desktop, puoi vivere una vita kool senza sapere nulla delle espressioni regolari. Ma attenzione, Visual Studio ha una ricerca di espressioni regolari, ma mi chiedo se qualcuno lo usi regolarmente. Non sto pensando (devi prima correggere la tua espressione regolare perché puoi fare una ricerca :)).

  2. Come sviluppatore web, molto probabilmente dovrai imparare l'espressione regolare. Puoi farla franca perché puoi trovare facilmente lo snippet di codice online che ti basterà, ma l'apprendimento ti aiuterà.

Ci sono aree come documentazione, contenzioso, questioni legali in cui l'espressione regolare è uno strumento indispensabile. Devi saperlo. Se non lo fai semplicemente non avrai il lavoro.

Quindi, in breve, se non fa parte di una descrizione del lavoro, non preoccupartene. Se ti piace apprenderlo, impara per divertirti.

    
risposta data 08.02.2012 - 18:50
fonte
0

Le espressioni regolari sono uno strumento molto utile e ci sono molte situazioni, quando il programmatore dovrebbe usarle. Non dovresti impararli tutti a memoria da usare. Basta usare il riferimento e fare il tuo compito. Dopo 10-20-50-100 (a seconda del programmatore) attività in cui sono state utilizzate le espressioni regolari, le conoscerai tutte a memoria. Si stanno imparando da soli, non dovresti impararli appositamente.

    
risposta data 08.02.2012 - 20:46
fonte
0

Vedo già molte risposte a questo, ma sembrano tutte relative al merito di conoscere le espressioni regolari come uno strumento nella casella degli strumenti del programmatore.

Preferisco di gran lunga pensare alle espressioni regolari come il tipo di conoscenza che espande la comprensione di come funzionano i computer. Una volta che qualcuno ottiene veramente quello che è un linguaggio normale, e che è possibile esprimerlo con tre semplici operazioni, credo che dia loro qualcosa oltre il semplice strumento per convalidare le stringhe semplici.

Diventano in grado di comprendere meglio l'analisi in generale, che è utile per quasi ogni tipo di programmazione, e capire meglio come funzionano gli strumenti che usiamo regolarmente (compilatore, editor, browser, ecc.).

I vantaggi pratici di usare le espressioni regolari sono ovviamente enormi. Anche se non "programmate" con loro, io uso sempre le espressioni regolari che trovate / sostituisco nel mio editor e misurano quanto più produttive mi fanno.

Quindi, anche se non è necessario, penso che sia uno dei primi strumenti che un programmatore dovrebbe imparare.

    
risposta data 09.02.2012 - 12:11
fonte
0

Rob Pike non la penso così :

Regular expressions are hard to write, hard to write well, and can be expensive relative to other technologies. Standard lexing and parsing techniques are so easy to write, so general, and so adaptable there's no reason to use regular expressions.

Another way to look at it is that lexers and parsing are matching statically-defined patterns, but regular expressions' strength is that they provide a way to express patterns dynamically. They're great in text editors and search tools, but when you know at compile time whatall the things are you're looking for, regular expressions bring far more generality and flexibility than you need.

Encouraging regular expressions as a panacea for all text processing problems is not only lazy and poor engineering, it also reinforces their use by people who shouldn't be using them at all.

Vale la pena notare che Pike riconosce di avere un posto, naturalmente, e IMHO, le espressioni regolari sono uno strumento piuttosto potente, uno che ha assolutamente premiato il tempo che ho speso per imparare ad usare e, da quel punto di vista, avrei consiglio assolutamente di impararli Ma è possibile che il vero problema sia che sono un cerotto che mi ha permesso di farla franca conoscendo meno lexing e parsing di quanto avrei dovuto. :)

    
risposta data 16.08.2012 - 23:16
fonte
0

Lasciatemi dire che le espressioni regolari sono spesso lo strumento giusto per il lavoro e sono piuttosto utili, specialmente con le applicazioni che elaborano molto testo. Tuttavia, memorizzarli è follia. Ho un cheat pinned sul mio muro che ha tutti i personaggi speciali, ancore, classi di caratteri, modificatori di pattern, metacaratteri ... Passa solo i 20 minuti necessari per imparare come usarli e ottenere un cheat sheet per mantenere traccia di tutto il resto. Tutto ciò di cui hai bisogno è di poter scrivere un'espressione regolare quando ne hai bisogno, che di solito è circa ogni 6 mesi, più o meno quando incontri un problema in cui sono lo strumento migliore da utilizzare per il lavoro. A meno che non siate in Perl, Latex, Emacs o in qualche altro gruppo di elaborazione di testi pesanti.

    
risposta data 18.08.2012 - 00:23
fonte

Leggi altre domande sui tag