Bonjour,

Je m'initie aux expressions régulières avec Le PDF de Naholyr et je bute déjà sur le premier exemple.

Voici le code retravaillé (une partie en POSIX et l'autre en PCRE)
Le principe est de, d'abord, vérifier que la chaine $adresse est bien un email valide, puis d'extraire cette adresse de la chaine $texte.

Les 2 méthodes utilisent le même pattern à la syntaxe prè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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$adresse = 'm.test@monfai.fr';
$texte = 'Cette chaine : '. $adresse . ' contient un mail';
 
echo '<strong>VERSION POSIX</strong>' . '<br /><br />'; 
if (ereg('^[[:alnum:]_\.]+@[[:alnum:]_\.]+\.[[:alpha:]]+$', $adresse)) 
    echo $adresse . ' est invalide.<br /><br />'; 
else
    echo $adresse . ' est valide.<br /><br />';
if (ereg('([[:alnum:]_\.]+)@([[:alnum:]_\.]+\.[[:alpha:]]+)', $texte, $regs)) 
{
    echo 'On a trouvé l\'adresse ' . $regs[0] . ' dans "' . $texte . '"<br />'; 
    echo 'LOGIN : ' . $regs[1] . ' - '; 
    echo 'DOMAINE : ' . $regs[2] . '<br /><br />'; 
}
else
    echo 'aucune adresse e-mail dans cette chaîne.<br /><br />';
print_r($regs);
echo '<br /><br />';
 
 
 
echo '<strong>VERSION PCRE</strong>' . '<br /><br />'; 
if (preg_match('`^[\w\.]+@[\w\.]+\.[a-z]+$`i', $adresse))
    echo $adresse . ' est invalide.<br /><br />';
else
    echo $adresse . ' est valide.<br /><br />';
 
if (preg_match('`([\w\.]+)@([\w\.]+\.[a-z]+)`i', $texte, $regs)) 
{
    echo 'On a trouvé l\'adresse ' . $regs[0] . ' dans "' . $texte . '"<br />'; 
    echo 'LOGIN : ' . $regs[1] . ' - '; 
    echo 'DOMAINE : ' . $regs[2] . '<br /><br />'; 
} 
else
    echo 'aucune adresse e-mail dans cette chaîne.<br /><br />';
print_r($regs);
echo '<br /><br />';
Mon problème est le suivant :
- Tel quel, les 2 méthode m'inquent que le mail est invalide mais l'extraient correctement de la chaine $texte
- Si j'ajoute un tiret (-) entre "mon" et "fai", c'est le contraire : le mail serait valide mais impossible de l'extraire.