2 votes

Comment convertir un texte brut en lien hypertexte html en java ?

J'utilise l'expression actuelle pour convertir les hyperliens en texte brut, comme avec http ou https, en hyperliens html.

String pattern = "(?:https|http)://([^\\s\\|]+)";

Cependant, dans le contenu du message qui sera soumis à ce modèle d'expression régulière, j'ai du contenu comme suit [video]http://www.yahoo.com[video].

Pour ce type de contenu entre les deux parenthèses de la vidéo. Je ne veux pas qu'il soit converti en lien hypertexte html car il sera affiché sur la page.

Comment résoudre ce problème ?

3voto

dacwe Points 26160

Utilisez le lookahead et le lookbehind négatifs en utilisant les éléments suivants (?<!...) y (?!...) :

String link = "(?:https|http)://([^\\s\\|]+)";
String pattern = "(?<!\\[video\\])" + link + "(?!\\[video\\])";

Pattern p = Pattern.compile(pattern);
System.out.println(p.matcher("[video]http://www.yahoo.com[video]").matches());
System.out.println(p.matcher("http://www.yahoo.com").matches());

Sorties :

false
true

Exemple complet :

public static void main(String... args) {

    Pattern pattern = Pattern.compile(
            "(?<!\\[video\\])(?:https|http)://([^\\s\\|]+)(?!\\[video\\])");

    String text = "This is some example text with a link" +
        "[video]http://videolink[video] that should not be replaced" + 
        "and another link that should be" +
        "replaced http://www.example.com";

    Matcher m = pattern.matcher(text);

    StringBuffer sb = new StringBuffer();
    while (m.find())
        m.appendReplacement(sb, "<a href=\""+m.group()+"\">"+m.group() +"</a>");
    m.appendTail(sb);

    System.out.println(sb);
}

Sorties :

Voici un exemple de texte avec un lien [video]http://videolink\[video] qui ne doit pas être remplacé et un autre lien qui doit être remplacé http://www.example.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X