Regexp

Bonjour
je chercher a extraire Hello World de la String suivante:

"blablabla\nxd\nHello World!\nlol\nblablabla"

donc j'utilise

le code suivant:

   Pattern MY_PATTERN = Pattern.compile("(xd)(.*)(lol)");
Matcher m = MY_PATTERN.matcher("blablabla\nxd\nHello World!\nlol\nblablabla");
while (m.find()) {
String s = m.group(2);
System.out.println(s);
et la je n'ai rien en retour

je fais de meme avec cette string a peine differente:

   Pattern MY_PATTERN = Pattern.compile("(<)(.*)(>)");
Matcher m = MY_PATTERN.matcher("blablabla\nxd\n<Hello World!>\nlol\nblablabla");
while (m.find()) {
String s = m.group(2);
System.out.println(s);

et la miracle j'ai bien Hello World!

je souhaiterai comprendre pourquoi ca ne marche que dans le 2eme cas avec les <>
j'avais essayé avec "(.*xd)(.*)(.*lol)" initialement mais ca ne marche pas

j'ai cette version de java
java version "1.7.0_25"
OpenJDK Runtime Environment (fedora-2.3.12.1.fc17-i386)
OpenJDK Server VM (build 23.7-b01, mixed mode)

2 réponses

  1. Tes deux exemples ne retournent pas la même valeur.

    Cas 1:
    group(2) = \nHello World!\n

    Cas 2:
    group(2) = Hello World!

    Ça fait un moment que j'ai fait du Java mais j'oserais penser que ton problème réside dans les "\n".

    Bonne chance!
    1. Modérateur
      Il faudrait savoir ce que tu veux faire avec cette expression régulière, au delà de cet exemple. Parce qu'il y a plusieurs manières d'extraire cette chaîne de caractères, mais certaines ne seront pas bonnes pour ce que tu veux faire plus tard.

      Le plus simple :

      String str = "blablabla\nxd\nHello World!\nlol\nblablabla";
      String[] tab = str.split("\n");
      System.out.println(tab[2]); // "HelloWorld!"