Bonjour à tous
Je viens vers vous car je n'arrive pas à trouver mon erreur. Comprenez : Ma regex "fonctionne", mais à moitié. Je voudrais que lorsqu'elle voit la ligne
CRLF
Content-Type: text/plain; charset=ISO-8859-1; format=flowed; delsp=yesCRLF
Elle me sorte comme groupes
Content-Type
text/plain
charset
ISO-8859-1
format
flowed
delsp
yes
Or, j'ai remarqué qu'elle ne me sors jamais les groupes "intérieurs". Au lieu du résultat ci-dessus, j'ai
Content-Type
text/plain
delsp
yes
Les deux sections centrales ne sont pas répertoriées... Pourquoi ?
Voici mon code entier :
Il doit y avoir une erreur avec les ?:. Pouvez-vous m'éclairer ? Ce serait vraiment sympa de votre part, car le parsing d'email c'est juste horrible :s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class RegexParser { public static void main(String[] args) throws Exception { Pattern p = Pattern.compile( "^(Content-Type):(?:[ \t]|\r\n )*((?:\r\n |[^;\r\n])+)(?:(?:[ \t]|\r\n )*;(?:[ \t]|\r\n )*(\\w*)=((\r\n |[^\r\n\\s])+))*\r\n", Pattern.MULTILINE); //... // Le String s contient le mail, c'est le bon, rigoureusement testé. Matcher m = p.matcher(s); while (m.find()) { System.out.println("Matched: -" + m.group() + "-"); for (int i = 1; i < m.groupCount(); i++) System.out.println("\tgroup" + i + ": -" + m.group(i) + "-"); } } }
EDIT/ Si vous voulez tester sur un vrai mail, essayez avec le fichier joint qui contient plusieurs Content-Type.
Partager