È indispensabile che ogni programmatore apprenda le espressioni regolari? [chiuso]


82

Sono nuovo nella programmazione e durante un'intervista ho ricevuto una domanda sulle espressioni regolari; inutile dire che non potevo rispondere. Quindi mi chiedevo se avrei dovuto imparare l'espressione regolare? È un must per ogni programmatore di tutti i campi? O è un must per la programmazione di alcuni campi particolari?

Domande correlate:


55
Personalmente so cosa sono, quando usarli e come sintassi di Google.
scrollate di

35
È un must per tutti gli utenti esperti. E i programmatori devono essere utenti esperti per essere produttivi.
SK-logic

8
Perché non vorresti impararli? Hai già riscontrato almeno una situazione in cui avresti beneficiato di conoscerli. Non è logico che potresti trovarti in una situazione simile in futuro?
FishBasketGordo

23
Solo quelli che funzionano con il testo :)
Steve Jackson,

Risposte:


113

Le espressioni regolari sono uno strumento incredibilmente conveniente, disponibile in così tante lingue che la maggior parte degli sviluppatori le imparerà prima o poi.

Per un intervistatore, sono un bel modo di sondare l'esperienza durante un'intervista. Se stai intervistando qualcuno che afferma di avere anni di esperienza e che non li capisce, devi approfondire.


4
Sono d'accordo, è una buona domanda per qualsiasi sviluppatore esperto. Ma chiedere a un neolaureato senza esperienza lavorativa su di loro è probabilmente leggermente ingiusto - a meno che non volessero davvero filtrare i candidati senza alcuna esperienza pratica di programmazione.
SK-logic

2
@ SK-logic: dipende dalla scuola. Abbiamo avuto tutti un corso obbligatorio nel 2 ° anno che ha fatto un uso piuttosto pesante delle espressioni regolari (lo ammetto, è lì che mi sono appassionato a loro;)). E più di alcuni corsi di livello senior li hanno riportati di nuovo, anche se mai così intensamente.
FrustratedWithFormsDesigner

Concordato con i commenti sopra - non mi aspetto che qualcuno appena uscito da scuola conosca necessariamente espressioni regolari. Ma potrei ancora chiedere.
ptyx,

13
Sono un matematico, quindi non ho un background formale in informatica, ma avrei pensato che le regex fossero effettivamente insegnate nei corsi universitari, discutendo grammatiche, parser, macchine automatiche e quant'altro. In realtà mi aspettavo che qualcuno appena uscito dal college avrebbe avuto una conoscenza migliore di un programmatore esperto senza studi CS. : - /
Andrea

8
@Andrea, quando ero all'università (BS in Informatica) le espressioni regolari erano effettivamente coperte quando imparavo su grammatiche e automi. Tuttavia, è stato coperto solo il concetto formale, non le applicazioni. Non abbiamo appreso la sintassi delle espressioni regolari compatibili con POSIX o Perl, né come usarle nella nostra codifica. Abbiamo imparato a disegnare un diagramma di stato di un automa a stati finiti, a scrivere che come espressione regolare, ecc. Erano coinvolte lettere greche, non grep e file di testo.
Adam Jaskiewicz,

54

Le espressioni regolari sono uno strumento. Capita di essere uno strumento molto utile, quindi molte persone scelgono di imparare come usarlo. Tuttavia, non vi è alcun "requisito" per imparare a usare questo particolare strumento, più di quanto non ci sia un "requisito" per imparare qualcos'altro.


19
Questo è vero come dire che la comprensione della logica booleana è utile, ma non necessaria.
Oded,

1
@Oded: non ho trovato alcun uso per la logica booleana insegnata nel mio corso.
DeadMG

16
@DeadMG, utilizzo sempre la logica booleana, come nelle conversioni: if (!(foo && bar))=> if (!foo || !bar). Forse l'hai usato e non te ne sei reso conto, o forse non ti è stato insegnato il materiale giusto.
zzzzBov

7
Ti piace il controllo delle versioni? O test del software?
Konrad Rudolph,

2
@ruakh - Sono d'accordo che sono estremamente utili; Li uso sempre io. Penso che tutti i programmatori dovrebbero imparare ad usare le regex ad un certo punto della loro carriera. La domanda, tuttavia, non lo poneva.
eykanal,

33

Non sarei sorpreso se, ad esempio, un programmatore di giochi o un programmatore presso l'LHC non imparassero mai espressioni regolari. Potrei anche dare a un programmatore di giochi un passaggio sul non conoscere SQL.

Ma se stai lavorando in sistemi di informazione di qualsiasi tipo e se non conosci espressioni regolari, stai facendo un disservizio.

D'altro canto, non mi aspetterei che il tuo programmatore IS standard conoscesse la matematica della matrice che un programmatore di giochi avrebbe. Esistono discipline distinte di programmatore, tuttavia dobbiamo farci cadere sotto l'ombrello dei "sistemi di informazione".


1
I programmatori dell'LHC potrebbero usare espressioni regolari per cercare tra i file di dati prodotti dai sensori. I programmatori di giochi potrebbero usare espressioni regolari per cercare i file di registro prodotti dai loro giochi. Ok, potrebbe non essere necessario, ma probabilmente potrebbe rendere questi compiti molto più semplici.
FrustratedWithFormsDesigner

1
Sono d'accordo, ma se intervistassi per una posizione di programmatore di giochi assumerei ancora qualcuno se non sapessero che espressione regolare fosse. Se assumessi qualcuno in un ruolo di programmazione aziendale tradizionale che non sapeva quali fossero le espressioni regolari, probabilmente non sarebbero stati assunti.
Jonathan Rich,

È giusto, immagino.
FrustratedWithFormsDesigner

7
I fisici delle particelle lavorano principalmente in ambienti unix-like, ma come ogni altra cosa legata al computer in quella comunità, la maggior parte delle abilità sono trasmesse da tradizioni orali. I livelli di raffinatezza nei regexps variano. Ma non cerchiamo i dati con regexps: ce ne sono troppi e non sono in formato testo. Cerchiamo log e DB ad hoc, codice e documentazione a metà, proprio come tutti gli altri.
dmckee,

1
@FrustratedWithFormsDesigner, non assumerei un programmatore di giochi che non conosceva regex. La programmazione è per sua natura ad alta intensità di informazioni indipendentemente dal campo . Non importa cosa fai: in qualsiasi disciplina hai codice sorgente, editor di testo con regex e file di registro. Senza regex si sarà essere significativamente meno efficienti nello svolgimento di determinati compiti (anche se non c'è bisogno di scrivere una sola riga di regex nel gioco spedito). Non sto dicendo che regex è necessario per un programmatore di giochi. Sto solo dicendo che non avrei assunto uno che non lo sapesse.
Ben Lee,

22

Le espressioni regolari sono un modo molto conciso per esprimere come abbinare i motivi nel testo.

Il requisito di analizzare ed estrarre dati dal testo o di convalidare la conformità di alcuni testi a uno schema specifico emerge molto spesso durante la programmazione, quindi direi di sì, è importante conoscerli e capirli.

Sono un buon strumento da avere nella tua cassetta degli attrezzi e mi aspetterei che qualsiasi programmatore esperto sappia come usarli.

Una delle migliori risorse per conoscere le espressioni regolari è il libro di Jeffery Friedl, Mastering Regular Expressions . È piuttosto avanzato, quindi potresti volerlo leggere quando hai avuto qualche esperienza in più.

Puoi iniziare con il tutorial su regular-expressions.info .


2
Questa è per me una questione di gusti. Non ne ho mai avuto davvero bisogno. Li ho usati in alcuni progetti, quindi so come funzionano, ma avrei potuto facilmente andare avanti senza e averli visti abusati più spesso di quanto ne sentissi il bisogno. Per semplificare uno schema e potresti anche usare la manipolazione delle stringhe in modo complesso ed è più veloce usare (e) BNF almeno se ti piaccio sono abituati a lavorare con i parser
Rune FS

15

Contrariamente alla maggior parte delle risposte qui non penso che la conoscenza dei registri sia un'abilità necessaria per essere un programmatore produttivo. Quando intervisto i candidati per un incarico, approfondirei se si sentissero in dovere di migliorare le proprie capacità di regia. Perché? sono spesso usati in luoghi perché a loro piace il martello giusto, ma spesso quello che ti serviva era un cacciavite. Cerca SO per HTML e regex e vedrai alcune domande e alcuni motivi per cui regex è un disadattato.

La capacità di fare OOD corretto è richiesta prima che io possa sostenere l'assunzione di un intervistato, la conoscenza delle espressioni regolari non lo è certamente. E in realtà non credo che nessuno creda che tu possa essere un programmatore più produttivo che conosce regex ma manca di aree come l'analisi, la progettazione e la conoscenza del framework utilizzato

Certo a volte sono utili ma nei miei più di 20 anni come sviluppatore professionista penso di averli usati meno di 20 volte nel codice (e ho anche scritto alcuni script perl) li uso regolarmente per fare ricerche e sostituire però.


I programmatori che non conoscono le espressioni regolari spesso creano una grande pila di WTF quando un'espressione regolare funzionerebbe molto bene. I programmatori che conoscono SOLO espressioni regolari spesso creano un mucchio più piccolo ma enormemente errato di WTF che tenta di elaborare linguaggi non regolari (ad es. HTML) con espressioni regolari.
Kevin Cline il

14

Indipendentemente dal dominio in cui stai lavorando, le espressioni regolari sono uno strumento utile da sapere perché la maggior parte dei linguaggi di programmazione sono scritti come testo semplice. Regex è quindi un ottimo modo per manipolare e riformattare il codice sorgente ed è integrato in molti editor di testo. Ho visto innumerevoli programmatori apportare ripetute modifiche ai file sorgente quando un'espressione regolare avrebbe apportato le modifiche in modo molto più rapido e preciso.

Questo è ciò di cui parla il capitolo 3 del programmatore pragmatico, con il semplice testo che è la "materia prima di base della programmazione".


Perché non usi semplicemente un ide che supporta il refactoring?
NimChimpsky,

2
Se avessi posto la domanda in questo post, ti avrei dato il segno di spunta. Questa è la ragione principale per cui non avrei mai assunto qualcuno che non conoscesse regex. È un potente strumento di modifica del codice e di ricerca dei log anche se non hai mai bisogno di scrivere una singola riga di codice che lo utilizza. Qualcuno che non sa che sarà ordini di grandezza meno efficienti in determinate attività quotidiane.
Ben Lee,

10

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

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

C'è anche un'ottima risposta a una buona domanda, uno stack overflow che potresti voler controllare.

Dovresti assolutamente sapere un po 'a riguardo. Le espressioni regolari sono facili da imparare ma difficili da padroneggiare. Non è necessario imparare tutto al riguardo per iniziare ad usarlo. Sii solo sensibile al riguardo.

 

tl; dr

Devi conoscere la tecnologia in modo da poter prendere una buona decisione su quando utilizzarla.


8

Lavoro in una base di codice incorporata che non dispone di una libreria di espressioni regolari disponibile. Un determinato compito richiedeva 275 righe 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. L' esatto stessa operazione utilizzando le espressioni regolari usata 10 linee di codice e funzionava perfettamente in circa 15 minuti.

Hai bisogno di espressioni regolari? Tecnicamente no, ma è sciocco rimanere intenzionalmente ignoranti di uno strumento così efficiente.


6

per citare un'altra risposta:

Le espressioni regolari sono un modo molto conciso per esprimere come abbinare i motivi nel testo.

Quindi, se questa è una parte importante del tuo lavoro, probabilmente c'è un modo migliore per progettare il sistema che stai sviluppando. A meno che molti testi non siano specifici del dominio della tua area (ad es. Bioinformatica).

Ho lavorato su tre diversi sistemi aziendali (in tre diverse aziende per dieci anni) e li ho scritti meno di cinque volte, e questo include la copia e incolla di un validatore di posta elettronica di base due volte.


2
Un sacco di testo è sempre specifico del dominio. Dopo tutto sei un programmatore . Il testo (sotto forma di codice sorgente) è il tuo dominio. La manipolazione efficiente del testo con espressioni regolari ti rende un programmatore più efficiente.
quantico

2
@quanticle che non ha alcun senso. In realtà manipoli il tuo codice sorgente con espressioni regolari? Sembra un vero incubo. Le espressioni regolari fanno parte del codice e il codice interagisce con i dati specifici del dominio.
NimChimpsky,

3
Manipolo il codice sorgente con espressioni regolari. Rifattorizzare a mano grossi pezzi di codice è noioso e soggetto a errori. L'uso di un editor che supporta la ricerca e la sostituzione di espressioni regolari (suggerimento: praticamente ogni editor supporta regexp trova e sostituisci) rende il refactoring molto più semplice.
quantico

3
@Dunk non sta dicendo che è un grande guadagno di efficienza, nel corso della vita di un progetto, ma piuttosto che può essere un grande guadagno in un breve periodo di tempo. Ho anche fatto refactoring dove c'erano centinaia, persino migliaia, di cambiamenti in dozzine di file. Nel corso della vita del progetto le ore risparmiate sono insignificanti, ma sicuramente non volevo prendere le ore o i giorni che ci sarebbero voluti per fare le stesse modifiche a mano. Gli IDE moderni possono fare un po 'di questo per te senza che tu scriva una regex, ma a volte non può (ricablare un modello di assegnazione comune per esempio).
jmoreno,

2
@NimChimpsky Regexps funzionano ovunque. Gli IDE e gli strumenti di refactoring funzionano solo per lingue specifiche. Ad esempio, il tuo strumento di refactoring mi consentirà di esaminare tutti i miei modelli e trovare / eliminare una stringa che assomiglia a un numero di telefono ( sites.google.com/site/steveyegge2/… )?
quantico

4

Le espressioni regolari possono essere pensate come uno strumento di elaborazione molto utile, multilingue, multipiattaforma. Posso usare regex nel mio codice, posso usare regex nel mio editor, posso usare regex dalla riga di comando!

Non è solo ciò di cui hai bisogno, o dovresti impararli. È più simile

WOW! ADORO REGICE!


4

Non è necessario conoscere a memoria tutte le piccole stranezze di regex per essere un grande programmatore, specialmente perché tutti tendono a variare un po 'intorno alle diverse implementazioni e ai linguaggi di programmazione. Quello che devi sapere è

  • Cosa sono le espressioni regolari e le regex.
  • Che tipo di cose fanno in modo efficiente (analizzando le lingue normali)
  • Che tipo di cose non sono sufficienti (analizzando cose nidificate, usando tonnellate di backreferenze)
  • Dove ottenere informazioni sulla sintassi ogni volta che è necessario leggerne o scriverne una.

Ad ogni modo, non devi nemmeno preoccuparti troppo del fatto che ci vorrà troppo sforzo per impararli in primo luogo. Gli operatori più semplici ( ., *, |, (), ecc) sono quasi universalmente presente e andare un lungo cammino!


Penso che questo sia davvero un buon punto. Saper utilizzare riferimenti secondari e altre funzionalità avanzate di alcuni motori RE è solo moderatamente utile. Nella maggior parte dei casi, combinare l'uso di RE con un po 'di logica è più leggibile e più facile da mantenere.
Mark Bessey,

3

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

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'uso di qualsiasi altro metodo sarà molto più complesso


2
e questo non è complesso? questo utilizza diverse funzioni speciali non nel set regex standard. una lunghezza e un riempimento semplici andrebbero bene per questo
maniaco del cricchetto

2

Non è un must. Devi solo essere consapevole della loro esistenza e quando usarli. Le specifiche della sintassi sono facili da trovare e ottenere correttamente utilizzando Google e gli strumenti online.


2

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

Un vero programmatore conosce le loro espressioni regolari

Questo è un po 'distorto, tuttavia, dal momento che sono principalmente coinvolto nella programmazione web, in cui le espressioni regolari sono qualcosa che devi incontrare molto, sia sul lato server che sul lato client. Se tu fossi un programmatore di assemblaggio per un sistema integrato in una lavastoviglie, probabilmente non incontreresti affatto espressioni regolari. Ma potrebbe comunque tornare utile, poiché nella maggior parte dei casi sei più in grado di gestire il tuo ambiente di sviluppo quando conosci espressioni regolari (cerca e sostituisci, cerca un file, cerca in più file, ecc ...).

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


Inoltre, è inutile imparare a memoria le specifiche complete all'inizio, poiché ci sono molti dialetti diversi. Invece, prova a concentrarti sull'apprendimento delle basi: (1) crea alcune semplici regexps e impara il significato di. * + {} [] () e - e alcune classi di base. (2) con una specifica specifica a portata di mano, cerca di capire cosa sta succedendo nelle regexpes che incontri.
Aron Cederholm,

Per cosa usi reg exps in yr web dev. È quello che faccio e l'ho usato 5 volte in 10 anni +.
NimChimpsky,

Per cominciare: analisi o convalida dell'input dell'utente (ad es. E-mail, codice postale / codice postale, moduli di ricerca dell'utente). Ma anche per scopi I18n e l10n per stringhe di traduzione personalizzate e variabili in più lingue / locali. E sicuramente sono venuti in aiuto con qualche rilevamento degli errori e un bel po 'di gestione degli errori. E nel mondo CMS / blog / commenti per il markup wiki / forum. Per dati esterni (input dell'utente, pagine scansionate, risorse sincronizzate, ecc.) Analisi, gestione e riscrittura di contenuti / collegamenti / qualunque cosa. Inoltre per tutti gli scopi e le registrazioni delle statistiche (rilevamento del browser, ordinamento dei referer, ...)
Aron Cederholm

-1 per un commento così follemente ignorante "Un vero programmatore ..."
Dunk

È un modo piuttosto superficiale di convalidare l'input dell'utente e sarei sorpreso se i tuoi regex fossero accurati al 100% (la validazione via e-mail è quella famosa). E non scrivo queste "stringhe di traduzione personalizzate e variabili in più lingue / locali" che traduci tra le lingue usando regex - er wtf? Scopi statistici: fai statistiche con espressioni regolari? Riscrivere link / contenuti con regexs mi sembra un odore di codice.
NimChimpsky,

1

È un must? Sai già cosa DEVI sapere: che esistono, che cosa sono e per cosa vengono utilizzati. Il tuo lavoro come programmatore è quello di risolvere i problemi. Ora sai abbastanza per iniziare a includerli nella tua soluzione per risolvere il tuo problema. Dovresti imparare regex? Assolutamente. La priorità spetta a te ... ci sono lavori in cui verranno utilizzati tutti i giorni e lavori in cui non verranno mai utilizzati. Una semplice guida sarebbe la quantità di pattern corrispondente ai problemi che ti aspetti di incontrare.


1

Hmm, ho bisogno di separare le virgole e generare questo elenco di stringhe, fammi scrivere una funzione contenente un ciclo for che accetta un argomento separatore e continuare ad aggiungerli insieme ... oppure potrei semplicemente usare questo comando 'join' esistente.

Ho bisogno di ordinare questi oggetti complessi in base a un paio di attributi che ogni oggetto ha, lasciami ricordare come scrivere una funzione di ordinamento che lo fa, oh no aspetta, posso semplicemente usare la funzione di ordinamento standard esistente che questo linguaggio supporta. Dovrò imparare a 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 elemento, fino a un singolo elenco. Quindi non devo scrivere una mezza dozzina di affermazioni simili che elaborano ciascuna lista in modo diverso. Immagino che dovrei studiare sodo e imparare quelle cose perché il mio codice sarà molto più semplice e pulito se lo faccio.

Devo estrarre da questo file di testo queste coppie di parole e valori tra tutti questi altri rumori, lasciami scrivere un parser di cinquanta righe per leggere i caratteri uno ad uno e se uno dei personaggi sembra l'inizio di quello che sono cercando imposterò questa variabile di stato e inizierò ad analizzarla in modo diverso e così via, ecc ... ovviamente il mio caso è ovviamente così speciale che nessun altro si è mai imbattuto in un problema come questo prima e ha inventato una soluzione generica che segue una riga di codice per farlo. Questo mi ricorda che dovrei portare quei libri di programmazione che non ho mai letto nel negozio di libri usati.


1

Risposta breve: No Ma .... la conoscenza è potere.

Sono uno sviluppatore web e trovo che qualsiasi espressione regolare di cui ho generalmente bisogno sia già stata scritta per me. Tuttavia ho avuto problemi con la copia e incolla e non rendendomi conto di cosa stesse facendo o no, il che è un pericolo di copia e incolla di QUALCOSA.

Un esempio: un regex di e-mail che ho copiato e incollato non ha consentito per un periodo o più in una e-mail consentita nelle specifiche dell'indirizzo e-mail. In effetti molte persone usano gmail con actualemail+sitename@gmail.com in modo che diventi facile filtrare "sitename" se scelgono di inviare spam.


0

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

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

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


0

Dipende dall'area / piattaforma in cui stai lavorando

  1. Per le applicazioni desktop, puoi vivere una vita divertente 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 dovrai probabilmente imparare l'espressione regolare. Puoi cavartela perché puoi facilmente trovare lo snippet di codice online che ti basterà, ma l'apprendimento ti aiuterà.

Ci sono aree come documentazione, contenzioso, materiale legale in cui l'espressione regolare è uno strumento indispensabile. Devi saperlo In caso contrario, non otterrai semplicemente il lavoro.

Quindi in breve, se non fa parte della descrizione di un lavoro, non preoccuparti nemmeno di questo. Se ti piace impararlo, imparalo per divertimento.


0

Le espressioni regolari sono uno strumento molto utile e ci sono molte situazioni in cui il programmatore dovrebbe usarle. Non dovresti impararli tutti a memoria da usare. Usa solo il riferimento e fai il tuo compito. Dopo 10-20-50-100 (a seconda del programmatore) attività in cui hai usato espressioni regolari, le conoscerai tutte a memoria. Stanno imparando da soli, non dovresti impararli appositamente.


0

Vedo già molte risposte a questo, ma sembrano tutte riguardare il merito di conoscere le espressioni regolari come uno strumento nella cassetta degli attrezzi del programmatore.

Preferisco di gran lunga pensare alle espressioni regolari come al tipo di conoscenza che espande la comprensione di come funzionano i computer. Una volta che qualcuno capisce veramente cos'è una lingua normale e che puoi esprimerla con tre semplici operazioni, credo che dia loro qualcosa al di là del semplice strumento per convalidare semplici stringhe.

Riescono a comprendere meglio l'analisi in generale, il che è utile per quasi tutti i tipi di programmazione e a capire meglio come funzionano gli strumenti che usiamo regolarmente (compilatore, editor, browser, ecc.).

I vantaggi pratici di utilizzo di espressioni regolari è ovviamente enorme. Anche se non "programmi" con loro, uso espressioni regolari facendo sempre ricerca / sostituzione nel mio editor e misuro quanto più produttivi mi rendono.

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


0

Rob Pike non la pensa così :

Le espressioni regolari sono difficili da scrivere, difficili da scrivere bene e possono essere costose rispetto ad altre tecnologie. Le tecniche di lex e analisi standard sono così facili da scrivere, così generali e così adattabili che non c'è motivo di usare espressioni regolari.

Un altro modo di vederlo è che i lexer e l'analisi analizzano i pattern definiti staticamente, ma la forza delle espressioni regolari è che forniscono un modo per esprimere i pattern in modo dinamico. Sono ottimi per gli editor di testo e gli strumenti di ricerca, ma quando sai in fase di compilazione quali sono le cose che stai cercando, le espressioni regolari offrono molta più generalità e flessibilità di quanto tu abbia bisogno.

Incoraggiare le espressioni regolari come una panacea per tutti i problemi di elaborazione del testo non è solo ingegneria pigra e scadente, ma rafforza anche il loro uso da parte di persone che non dovrebbero usarle affatto.

Vale la pena notare che Pike riconosce che hanno un posto, ovviamente, e IMHO, le espressioni regolari sono uno strumento abbastanza potente, uno che è assolutamente ricompensato dal tempo che ho trascorso imparando ad usare e, da quel punto di vista, consiglierei assolutamente di imparare loro. Ma è possibile che il vero problema sia che sono un cerotto che mi ha permesso di cavarmela con meno informazioni sul lexing e sull'analisi di quanto dovrei. :)


0

Vorrei solo dire che le espressioni regolari sono spesso lo strumento giusto per il lavoro e sono piuttosto utili, soprattutto con le applicazioni che elaborano molto testo. Tuttavia, memorizzarli è una follia. Ho un cheat sheet appuntato sul mio muro che ha tutti i personaggi speciali, le ancore, le classi di caratteri, i modificatori di pattern, i metacaratteri ... Basta spendere i 20 minuti che ci vogliono per imparare come usarli e ottenere un cheat sheet da tenere traccia di tutto il resto. Tutto ciò di cui hai bisogno è poter scrivere un'espressione regolare quando ne hai bisogno, che di solito è ogni 6 mesi circa - ogni volta che incontri un problema in cui sono lo strumento migliore da usare per il lavoro. A meno che tu non faccia parte del Perl, Latex, Emacs o di qualche altro team di elaborazione di testi pesanti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.