Regexp o parsing personalizzato algo?

2

Stavo cercando di analizzare un file di proprietà java per evitare alcuni problemi di caricamento delle proprietà (non ordinamento, perdita di commenti).

(Le proprietà sono del tipo 'chiave = valore' dove il valore può estendersi su più righe usando il \ char speciale)

Ho cercato di ottenere la regexp giusta per analizzare le proprietà, ma dopo aver rinunciato dopo aver combattuto per più di un'ora. (una versione per groovy ha trovato qui :
~ /^([^#=].*?)=(.+)$/)

Riesco a scrivere la stessa cosa usando un loop singolo e un codice molto banale in 5 minuti ...

Sono un programmatore medio quando ho a che fare con regexp: devo rileggere il documento ogni volta che voglio usarli e le funzioni avanzate sono ancora oscure per me.

Spesso quando si ha a che fare con regexp ho la sensazione che alcuni sviluppatori molto abili possano produrre / decifrare regexp molto elaborate in pochi secondi, ma altri hanno problemi a gestirle.

Domanda: dovrei prendere tempo per imparare a fondo regexp e produrre parser enigmatico e potente, o dovrei continuare a usare un po 'brutto facile da debug / capire l'analisi algo?

    
posta Guillaume 08.11.2010 - 14:25
fonte

2 risposte

3

Per questa attività specifica (analizzando il file delle proprietà java), cerca prima una soluzione esistente (sembra che qualcuno avrebbe già risolto lo stesso problema), e se non riesci a trovarne uno, non è necessariamente negativo creare un non -regex parser con cui farlo - usi gli strumenti che conosci.

Se segui la regex, non essere obbligato a usare una singola regex, quando due (o più) spesso danno un risultato molto più semplice e veloce.

should I take time to deeply learn regexp

YES

Ci sono molte volte in cui conoscere le espressioni regolari può velocizzare enormemente la programmazione - probabilmente uso più regex nelle attività di creazione di & mantenimento del codice rispetto al codice actuall stesso.

Ma forse i motivi principali per imparare profondamente la regex è che puoi dire velocemente "questo è un lavoro per regex" o "l'espressione regolare è lo strumento sbagliato qui" - altrimenti puoi sprecare un sacco di tempo cercando di ottenere un'espressione regolare per eseguire un'attività just isn ' t adatto per .

Tuttavia, è importante anche indicare che Regex non ha bisogno di essere criptico - puoi scrivere regex complesse e formattarlo in modo che sia comprensibile come qualsiasi altro codice.

    
risposta data 08.11.2010 - 14:28
fonte
1

Sono come te, uso le espressioni regolari così raramente che devo cercare un riferimento per tutti tranne gli esempi più banali. Ho lavorato con un paio di sviluppatori che erano abbastanza fluenti con loro e potrebbero fare cose abbastanza sorprendenti molto rapidamente. Penso che sia qualcosa che una volta che ne sai di più, vedrai sempre più modi per usarlo e l'investimento pagherà. Inoltre sembra un buon modo per allungare la mente.

    
risposta data 08.11.2010 - 14:30
fonte

Leggi altre domande sui tag