Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: bonmario - Ottobre 18, 2024, 01:46:48 pm

Titolo: [RISOLTO]Problema con le espressioni regolari
Inserito da: bonmario - Ottobre 18, 2024, 01:46:48 pm
Ciao,
ho modificato il messaggio originale, ed ho spostato qui la nuova richiesta, visto che effettivamente l'argomento è differente.

Faccio riferimento a quest'altro topic:
https://www.lazaruspascal.it/index.php?topic=2926.msg20054

Ho però un nuovo problema ...
Chi usa il programma, mi ha chiesto di aggiungere 2 bottoni, che servano per andare all'occorrenza successiva ed a quella precedente delle parole trovate.
Ho quindi aggiunto i 2 bottoni per andare all'occorrenza successiva ed a quella precedente.
La ricerca la faccio tramite le espressioni regolari (Classe TRegExpr della unit RegExpr).
Il bottone "trova successivo", sono riuscito a farlo funzionare perfettamente, ma non capisco come fare a fare la ricerca al contrario ...


La ricerca in avanti, la faccio con RegExpr.ExecNext(False), e funziona perfettamente, quella indietro con RegExpr.ExecNext(True), ma non funziona, e non capisco cosa fa !!!

P.S. Spiego nel dettaglio la richiesta dell'utilizzatore.
Supponiamo che nel testo della richmemo ci siano sparse le parole pippo, pluto e paperino, proprio in questo ordine.
Cliccando 3 volte sul bottone "Trova successivo", prima mi devo posizionare su pippo, poi su pluto e poi su paperino.
Se a questo punto clicco su "Trova precedente", deve tornare indietro, andando su pluto.
Se premo ancora lo stesso bottone, deve tornare indietro, ed andare sulla parola pippo

P.P.S. Prima di oggi, non avevo mai usato le espressioni regolari, ne' in fpc, ne da nessuna altra parte. Sapevo che esistevano, ma non sapevo di preciso cosa fossero. Mi viene quindi un dubbio: per vaso, per fare la ricerca al contrario, bisogna modificare la stringa dell'espressione regolare?

Grazie, Mario
Titolo: Re:[RISOLTO]Problema con le espressioni regolari
Inserito da: bonmario - Ottobre 18, 2024, 07:41:40 pm
Ciao,
lunedì devo fare qualche prova in più, ma credo di aver risolto.

I problemi erano 2: il primo era che la unit "regexpr", che fa parte di FPC, ha un bug. Facendo qualche ricerca, mi sono imbattuto in questa: https://github.com/andgineer/TRegExpr credo che sia lo stesso pacchetto che viene distribuito con FPC, ma più aggiornato. Per risolvere, l'ho scaricato.

L'altro problema era mio: per "tornare indietro", sbagliavo istruzione, quella corretta è risultata essere questa:
Codice: [Seleziona]
VFTRovato:=RegExprPerAvaInd.ExecPos(RegExprPerAvaInd.MatchPos[0] - 1, True, True); 

Ciao, Mario