Autore Topic: [Risolto] Uso del metodo replace di regexp  (Letto 1358 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Uso del metodo replace di regexp
« Risposta #15 il: 07 Gennaio 2022, 14:33:40 »

Non discuto l'espressione, ma se puo' essere accorciata o resa piu' leggibile. Inoltre, se avevo un piano di usare Gambas con le pcre, sarei curioso di sapere come mai il canonico segno della ripetizione non funziona: se vado sui siti di debug online, vedo che va bene invece. Se mi sono spiegato :-)

Anche io vorrei capire come accorciare l'espressione è che non riesco a comprendere cosa mi stai dicendo, puoi essere più chiaro e specifico.
Voglio dire ad esempio come ha fatto bb in questa discussione, mi ha chiesto : se voglio usare più opzioni di separatori faccio così?
Codice: [Seleziona]
"(([0-9]{1,2}))[/-.]([a-zA-Z]{3,10})[/-.]([0-9]{2,4})"
Io ho capito e gli ho risposto, credo che si faccia cosà
Codice: [Seleziona]
"(([0-9]{1,2}))(/|-|.)([a-zA-Z]{3,10})(/|-|.)([0-9]{2,4})")

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Uso del metodo replace di regexp
« Risposta #16 il: 07 Gennaio 2022, 17:31:28 »

Se e' soltanto per riconoscere se e' una data, non occorrono le parentesi se non per dividere le alternative. Le parentesi normalmente servono per le sostituzioni, ma se non ho capito male li' non servono, e basta soddisfare il MATCH. Quella riga, per esempio, a me risulterebbe essere

Codice: [Seleziona]
[0-9]{1,2}[\.-\/]([0-9]{1,2}|[a-zA-Z]{3,9})[\.-\/][0-9]{1,4}

e prende tutte e tre le date che nel messaggio della mailing list mostra come esempi. I separatori potrebbero essere scritti tutti in fila, ".-/", pero' poiche' forse (regex101 mi dice cosi') vanno escapati metto il backslash davanti al punto e allo slash.

ps: non so se sono necessari piccoli accomodamenti, li provo online nella versione PCRE che dovrebbe derivare quella usata da Gambas che qui non ce l'ho installato.

edit: se uso il segno di meno come separatore, pare debba escapare pure quello, e quindi non so se a quel punto convenga fare i separatori come ho fatto io e non come li avevi, dovrei trovare la regola comunemente usata...
« Ultima modifica: 07 Gennaio 2022, 17:38:24 da pastrank »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Uso del metodo replace di regexp
« Risposta #17 il: 07 Gennaio 2022, 18:29:28 »

Se e' soltanto per riconoscere se e' una data, non occorrono le parentesi se non per dividere le alternative. Le parentesi normalmente servono per le sostituzioni, ma se non ho capito male li' non servono, e basta soddisfare il MATCH. Quella riga, per esempio, a me risulterebbe essere

Codice: [Seleziona]
[0-9]{1,2}[\.-\/]([0-9]{1,2}|[a-zA-Z]{3,9})[\.-\/][0-9]{1,4}

...

con la tua espressione ottengo un errore di carattere non valido
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Uso del metodo replace di regexp
« Risposta #18 il: 07 Gennaio 2022, 19:01:37 »
con la tua espressione ottengo un errore di carattere non valido

Non lo trovo corretto, ma a Gambas (sono tornato a casa adesso) non piacciono i caratteri escapati in quel separatori, se li deescapi funziona.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Uso del metodo replace di regexp
« Risposta #19 il: 07 Gennaio 2022, 19:06:25 »
con la tua espressione ottengo un errore di carattere non valido

Non lo trovo corretto, ma a Gambas (sono tornato a casa adesso) non piacciono i caratteri escapati in quel separatori, se li deescapi funziona.

No qui non funziona
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Uso del metodo replace di regexp
« Risposta #20 il: 07 Gennaio 2022, 19:54:57 »
No qui non funziona

:-) Lo dicevo che era un canaio. Gli escape comunque funzionano anche raddoppiandoli.