PDA

View Full Version : REGEX - Eliminare tutto quello compreso tra due parole


cyber
17-11-2021, 10:50
Ciao,
sto cercando un modo per cancellare del testo compreso da una determinata parola fino all'inizio di un'altra, es:


UPDATE pass
SET stato = -3, descr_stato = 'Scartata' WHERE pratica = '1458'
AND stato = 0
AND anno IN (2016, 2017, 2018);

UPDATE pass
SET stato = -3, descr_stato = 'Scartata'
WHERE pratica = '2383' AND stato = 0 AND anno IN (2020);


In questo caso vorrei cancellare tutto quello che va da "SET" a "WHERE" (escluso)

è possibile?

Grazie,
CJ

wingman87
17-11-2021, 16:20
Puoi usare la regex
SET(.*?)WHERE
Con flag "g" e "s" e sostituire con
WHERE

https://regex101.com/r/qEmUG1/1

Non ho capito se vuoi cancellare anche SET, comunque basta modificare la stringa con cui sostituire i match.

cyber
18-11-2021, 09:39
Ciao ti ringrazio,
no devo cancellare il SET e lasciare il where. Ho provato su Notepad++ e funziona abbastanza bene, l'unico inconveniente è che mi cancella anche il WHERE. :mc:

https://i.postimg.cc/hPQD6dvY/Immagine-2021-11-18-093641.png (https://postimages.org/)

Ho provato a passargli i parametri /gs ma non ci sono riuscito. :p

cyber
18-11-2021, 11:12
No ok sto capendo solo adesso :D , hai sostituito il tutto direttamente con "WHERE"

Ma c'è un modo di dire di cercare anche su linee diverse, nel caso non sia disponibile la voce . matches new line? Purtroppo mi capita spesso di usare altri software dove questa opzione non è disponibile.

wingman87
18-11-2021, 15:49
Sì si può, esplicitando i caratteri "line terminator" (li ho presi da regex101, nello schemino di destra dove spiega il significato della regex, è nella descrizione del punto):
SET((.|[\r\n\u2028\u2029])*?)WHERE

Vedi esempio aggiornato dove ho rimosso il flag s:
https://regex101.com/r/qEmUG1/3

cyber
18-11-2021, 16:58
Perfetto, ti ringrazio molto, gentilissimo! :)

Grazie! :)