Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179

    [java]uso di replaceAll

    sapreste dirmi perchè ho questo errore e come risolverlo....grazie
    codice:
    String provenienza = (f.toString());   //f coniene il file da leggere
            String content = leggiContent(f, "iso-8859-1");  //modulo per la lettura del file e l'associazione ad un BufferReader dello stesso file
            String regex = "<SCRIPT.*?>(.*?)</SCRIPT>|" +   // Javascript/JScript/VBScript
                    "<\\?(?:php)?(.*?)\\?>|" +              // PHP
                    "<%.*?>(.*?)%>|" +                      // JSP
                    "<%@.*?(.*?)%>|";                       // ASP                        
            Pattern pattern = Pattern.compile(regex, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(content);
            //regular expression per l'estrazione delle info dalle
            //pagine             
            while (matcher.find()) {            
                if ((script = matcher.group(1)) != null) {
                    StringBuffer prova = new StringBuffer();
                    prova.append(script);                                
                 inserisci(dbConnRet,script,JavaScript,"",data,scopoScript,provenienza,"Client",number);     
                    String script2 = content.replaceAll(script,"");    
                    System.out.println(script2);
    l'errore che mi da è:
    codice:
    Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Illegal repetition near index 69
    
    if (typeof(adv_liberobgsfondo)!='undefined'&&adv_liberobgsfondo!=''){
    document.writeln('<style type="text/css">BODY {BACKGROUND-IMAGE: url("'+adv_liberobgsfondo+'"); BACKGROUND-REPEAT: repeat-x;}</style>');}
    
                                                                         ^
            at java.util.regex.Pattern.error(Pattern.java:1650)
            at java.util.regex.Pattern.closure(Pattern.java:2706)
            at java.util.regex.Pattern.group0(Pattern.java:2464)
            at java.util.regex.Pattern.sequence(Pattern.java:1715)
            at java.util.regex.Pattern.expr(Pattern.java:1687)
            at java.util.regex.Pattern.compile(Pattern.java:1397)
            at java.util.regex.Pattern.<init>(Pattern.java:1124)
            at java.util.regex.Pattern.compile(Pattern.java:817)
            at java.lang.String.replaceAll(String.java:2000)
            at TabellaScript.run(TabellaScript.java:153)
            at Pulizia$2.actionPerformed(Pulizia.java:97)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
            at java.awt.Component.processMouseEvent(Component.java:5488)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
            at java.awt.Component.processEvent(Component.java:5253)
            at java.awt.Container.processEvent(Container.java:1966)
            at java.awt.Component.dispatchEventImpl(Component.java:3955)
            at java.awt.Container.dispatchEventImpl(Container.java:2024)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
            at java.awt.Container.dispatchEventImpl(Container.java:2010)
            at java.awt.Window.dispatchEventImpl(Window.java:1778)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
    la linea 153 corrisponde alla linea di codice evidenziata in rosso
    mentre la 97 al passaggio del file da leffere cioè f

    quello che vorrei fare è: una volta trovata la regex(1) sostituiscila con ""
    ecco perchè cercavo di usare il replaceAll

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java]uso di replaceAll

    Originariamente inviato da nikynik
    String script2 = content.replaceAll(script,"");
    Il metodo replaceAll si aspetta come primo parametro una stinga che contiene una espressione regolare.
    Tu gli passi 'script', una variabile che contiene un pezzo della pagina HTML. Che NON è ovviamente una espressione regolare!!!!!!!

    Vuoi farla diventare una espressione regolare??? Tecnicamente si può anche fare (bisogna fare l'escape di diversi caratteri). Ma ..... a cosa ti serve???

    Vuoi forse togliere dalla pagina web tutto ciò che è stato matchato (ossia ottenere un testo che è la pagina web senza i vari script, ecc...)???

    L'avevo già spiegato qui
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    lo so and... me lo avevi già spiegato....
    ma non ho capito come fare....! (se ti chiedo il codice mi spari?!!!!!)
    cmq ho visto che cn replaceAll(almeno per me)è più semplice...
    ho inserito nel replaceAll: regex
    codice:
    String script2 = content.replaceAll(regex,"");
    in questo modo qualsiasi espressione regolare trova dovrebbe sostituirla cn ""... giusto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nikynik
    lo so and... me lo avevi già spiegato....
    ma non ho capito come fare....! (se ti chiedo il codice mi spari?!!!!!)
    cmq ho visto che cn replaceAll(almeno per me)è più semplice...
    ho inserito nel replaceAll: regex
    codice:
    String script2 = content.replaceAll(regex,"");
    in questo modo qualsiasi espressione regolare trova dovrebbe sostituirla cn ""... giusto?
    Non cambia niente cambiando solo il nome della variabile!! Forse non ti è chiaro che in una espressione regolare certi caratteri hanno un significato particolare e sono quindi trattati in modo speciale.

    Per quanto riguarda quello che avevo riportato qui ... beh, è di una semplicità spaventosa ... non so più cosa pensare e cosa fare per fartelo capire!!

    Cerco di spiegartelo ancora una volta: innanzitutto quando usi un Matcher, ogni volta che viene trovato un match, i metodi start() e end() ti indicano dove inizia e dove finisce il match. Ci siamo fin qui??? Per essere precisi end() ti fornisce l'offset del carattere dopo l'ultimo matchato.

    Ecco una stringa di esempio: "Returns the offset after the last character matched." e io voglio matchare "the".

    codice:
    Returns the offset after the last character matched.
    ^       ^  ^             ^  ^                       ^
    0       8  11            25 28                      52
    Se il Matcher ti dice: guarda, ho trovato un match da 8 a 11 (escluso) e poi dopo ti dice ho trovato un match da 25 a 28 (escluso), allora tutto il resto che NON è stato matchato, secondo te, cos'è????

    Risposta:
    da 0 a 8 (escluso)
    da 11 a 25 (escluso)
    da 28 a 52 (escluso)

    Quindi devi avere una variabile, chiamiamola 'from' inizialmente a 0.

    - Al primo match, start() ritorna 8 e end() ritorna 11. Fai un substring del content da 0 (cioè from) a 8 (cioè start() ) ed ottieni il primo pezzo non matchato. Poi metti from = end().
    - Al secondo match start() ritorna 25 e end() ritorna 28. Fai un substring del content da 11 (cioè from) a 25 (cioè start() ) ed ottieni il secondo pezzo non matchato. Poi metti from = end().
    - Dopo il loop dei match fai comunque in ogni caso un substring del content da 'from' ed ottieni il pezzo restante non matchato.

    Occhio ... non lo ripeto più.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    finalmente le cose mi sono chiare....!
    e mi scuso per la rottura di "scatole" cmq
    riesco ad ottenere tutto quello che nn è stato matchato....
    ma il mio problema era di SOSTITUIRE gli script con dei LINK ai file conteneti gli script "eliminati"...
    cerco di creare un file txt per ogni script eliminato.....
    ecco perchè mi ostinavo nell'uso di replaceAll

    ad esempio il mach mi trova il primo "the".. da 8 a 11(escluso), ora questo the dovrei sostituirlo con il link al file contenente il "the"....
    quindi pensavo di usare:
    content.replaceAll("<SCRIPT.*?>(.*?)</SCRIPT>","").... ed il "replacement" dovrebbe essere un link dinamico....
    la cosa può essere fatta in questo modo?

    un secondo problema è che devo essere in grado di scegliere quali script eliminare....
    per esempio voglio eliminare il secondo the (da 25 a 28 escluso). e quindi avrò una variabile che conterrà lo script da eliminare.... (questo sarà un problema successivo!)

    spero di essermi spiegato ache se credo proprio di no!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nikynik
    finalmente le cose mi sono chiare....!



    Prova questo:
    codice:
    import java.io.*;
    import java.util.regex.*;
    
    public class Prova
    {
        public static void main (String[] args)
        {
            try
            {
                String content = "Returns the offset after the last character matched.";
    
                String regex = "the";
    
                Pattern pattern = Pattern.compile (regex, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
                Matcher matcher = pattern.matcher (content);
    
                int from = 0;
    
                while (matcher.find ())
                {
                    System.out.print (content.substring (from, matcher.start()));
                    System.out.print ("AAA");
                    from = matcher.end ();
                }
    
                System.out.print (content.substring (from));
    
                System.out.println ("");
            }
            catch (Exception e)
            {
                System.out.println (e);
            }
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    si va bene... grazie
    alla fine forse sono riusci a spiegarmi.... grazie
    ma che tu sappia al posto di "AAA" si può mettere un link dinamico?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nikynik
    ma che tu sappia al posto di "AAA" si può mettere un link dinamico?
    Puoi metterci quello che vuoi. Comunque dovresti specificare meglio come deve essere questo link dinamico.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente bannato
    Registrato dal
    Sep 2006
    Messaggi
    179
    allora...
    ho sostituito ogni script cn AAA.

    ad es.al posto del primo script ho messo AAA,ora ci deve essere scritto(invece di AAA) ad es: script.txt
    questo file deve contenere lo script che è stato eliminato....
    cliccando quindi su script.txt si deve aprire il file

    lo scopo del programmino è ottenere un file html che NON contenga più SCRIPT ma solo il COLLEGAMENTO ad essi

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nikynik
    script.txt
    questo file deve contenere lo script che è stato eliminato....
    cliccando quindi su script.txt si deve aprire il file
    Aprire il file ... in quale modo?? Per far vedere all'utente il codice dello script e basta???

    Originariamente inviato da nikynik
    lo scopo del programmino è ottenere un file html che NON contenga più SCRIPT ma solo il COLLEGAMENTO ad essi
    Domanda come appena sopra: che faccia vedere il contenuto dello script oppure che sia un link allo script in modo che la pagina possa funzionare ma con gli script esterni???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.