Domanda

Non sono sicuro se questo è possibile fare, ma ho bisogno di un modo per sostituire un valore di un gruppo numerata specificato nella mia espressione regex con una stringa dichiarata in modo dinamico in fase di esecuzione, una volta che è stata fatta una corrispondenza.

Dato un semplice caso, qualcosa di simile ...

(/)?([A-Za-z0-9])?(/)?$

Vorrei essere in grado di plugin di un sostituto per il gruppo 2.

Attualmente sto usando classe Matcher di Java.

È stato utile?

Soluzione

Sì, questo è fattibile. Scopri la mia risposta a questa domanda per vedere come. In realtà, questa domanda probabilmente dovrebbe essere chiuso come un duplicato.

È necessario modificare la regex un po '. Non posso dire esattamente quello che stai cercando di fare, quindi non posso dare alcuna specificità, ma per lo meno si dovrebbe spostare tutti quei punti interrogativi all'interno dei gruppi.

(/)?([A-Za-z0-9])?(/)?$  // NO

(/?)([A-Za-z0-9]?)(/?)$  // YES

Ma sarà comunque corrisponde a un sottostringa vuota alla fine della stringa di destinazione, perché tutto è facoltativa, tranne l'ancora, $. E 'davvero questo ciò che si intende fare?

Altri suggerimenti

  

Non sono sicuro se questo è possibile fare ...

Si, è possibile. Vedere l'esempio di seguito.

  

Vorrei essere in grado di plugin di un sostituto per il gruppo 2.

Questa demo "spine nella" versione .toUpperCase del gruppo 2 come una sostituzione.

import java.util.regex.*;

class Main {
    public static void main(String... args) {
        String input = "hello my name is /aioobe/ and I like /patterns/.";
        Pattern p = Pattern.compile("(/)([A-Za-z0-9]+)(/)");
        Matcher m = p.matcher(input);
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String rep = m.group(1) + m.group(2).toUpperCase() + m.group(3);
            m.appendReplacement(sb, rep);
        }
        m.appendTail(sb);
        System.out.println(sb);
    }
}

Stampe:

hello my name is /AIOOBE/ and I like /PATTERNS/.

Ritorna il valore della ricerca regex e salvarlo in una variabile, poi fare una sostituzione sulla stringa principale utilizzando i risultati della ricerca regex come bersaglio ritrovamento e la stringa dichiarato dinamicamente come una sostituzione.

In realtà semplificata concettuale:

String testString = "Hello there";
//String substring = *Do your regex work here*
if(substring.length() > 0) {
   testString.replace(substring, dynamicallyGeneratedString); 
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top