whisky90 ha scritto:
vorrei qualche idea su come implementare una regexpr in java per trasformare in html le stringhe sopra
Premesso che esistono già librerie Java per il parsing di Markdown e la generazione del relativo HTML (ma non so dire ora quanto siano aggiornate/complete), la questione è che bisognerebbe anche vedere da
cosa parti. Hai una stringa che contiene
solo una riga di intestazione? O hai una grossa stringa che contiene tutto il documento su cui vuoi fare le sostituzioni "a tappeto"?
Comunque, con una sola regex e un replace "secco" non si può fare. Questo è un classico esempio di replace "complesso", come ad esempio quando hai una stringa es. "valore 1234" e vuoi fare un replace per ottenere il valore in hex "valore 4d2".
Con il solo replaceAll() (di String o di Matcher) NON si può fare.
Si può fare usando un loop e sfruttando gli appendReplacement/appendTail di Matcher, che sono stati fatti apposta proprio per questo tipo di replace "complessi" (vedi javadoc di dove mostra un esempio).
Da Java 9 il Matcher ha una variante sul replaceAll/replaceFirst molto interessante ed utile:
String replaceAll(Function<MatchResult,String> replacer)
String replaceFirst(Function<MatchResult,String> replacer)
Ovvero passare una funzione in grado di fornire la stringa per un replace "complesso". Ecco proprio l'esempio descritto sopra:
import java.math.BigInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ProvaReplace {
public static void main(String[] args) {
String input = "valore 1234";
Pattern pattern = Pattern.compile("[0-9]+"); // una o più cifre
Matcher matcher = pattern.matcher(input);
String output = matcher.replaceAll(match -> {
String numero = match.group(); // il numero catturato dal pattern (es. "1234")
return new BigInteger(numero).toString(16);
});
System.out.println(output); // stampa: valore 4d2
}
}