Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Sostituzione in espressione regolare

    Ciao a tutti.
    Avrei bisogno, una volta trovato il match della mia espressione regolare, di inserirmi al suo interno ed aggiungere un pezzo alla fine....

    Vi faccio l'esempio pratico:
    Voglio aggiungere l'attributo alt a tutti i tag <IMG> di un sito.



    Con questa espressione trovo tutti i tag:
    <\\s*IMG.*?>


    Successivamente dovrei sostituire '>' con ' alt="ciao">'

    Spero in una risposta chiara (magari con un bel codice ben commentato )
    Il cinghiale è un animale raffinato

  2. #2
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    stringaTrovata = stringaTrovata.replaceAll(">", "alt=\"ciao\">");

  3. #3
    Troppo semplice !

    La stringaTrovata è un altro oggetto, se modifico quella non mi cambia il testo!


    Esempio, con il testo:

    'ciao[img]ciao.jpg[/img] come stai'


    La mia funzione trova '[img]ciao.jpg[/img]' e lo salva in un'altra stringa. Se sostituisco nella stringa trovata non mi cambia il testo di partenza, ma la singola stringa!
    :master:



    Se invece sostituissi tutti i '>' mi prenderebbe anche quelli degli altri tag!
    Il cinghiale è un animale raffinato

  4. #4
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    certo, hai ragione...

    fatti una mappa con come chiavi le "stringhe trovate" e come valori le "stringhe trovate modificate".
    ex: chiave: "[img]ciao.jpg[/img]" ; valore: [img]ciao.jpg[/img]
    i valori ovviamente li produci usando replaceAll.

    poi cicli le entry della mappa e per ogni entry usi di nuovo replaceAll(chiave, valore) sulla stringona che contiene tutto il tuo file html.

  5. #5
    La tua idea è buona, ma credo di aver trovato un codice ancora più efficiente (sfogliando le API di Matcher)

    Guarda:
    codice:
    public static String aggiungiAlt(String html) {
    
      Pattern pattern = Pattern.compile("(<\\s*IMG.*?)>", Pattern.CASE_INSENSITIVE);
      Matcher matcher = pattern.matcher(html);
    
      StringBuffer sb = new StringBuffer();
      while(matcher.find()) {
        matcher.appendReplacement(sb, matcher.group(1) + " alt=\"\">");
      }
      matcher.appendTail(sb);
      return sb.toString();
    
    }
    Praticamente scorre i vari match (tramite il metodo find() che fa da cursore) e li sostituisce con group(1) + " alt=\"\">", dove group(1) è la parte di pattern che sta tra le parentesi.

    Ora funziona tutto
    Grazie comunque per l'aiuto
    Il cinghiale è un animale raffinato

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.