Jump to content

probleme de regex


Recommended Posts

Bonjour,

Je souhaite, lors de la soumission d'un formulaire, récupérer uniquement les données du type :

onmouseover="Tip('<strong>Ciane Bau<br>Member GV: 205<br>Home Phone:+33200000009280<br>Email: trd974_AT_gail.com<br>Enroller: Dier Herez<br>Enroller GV: 1160<br>Enroller Email: <a href=mailto:djxxm27_AT_yoo.fr>djxxm27_AT_yoo.fr</a><br>Enroller Phone: +3300000528br><br>Click to view more details</strong>', BALLOON, true, ABOVE, true);return false" onmouseout="UnTip()">

J'ai donc pensé aux regex...en disant que les données doivent commencer par : onmouseover="Tip('<strong> et se termine par onmouseout="UnTip()">

<?php
while($ok = preg_match("#^onmouseover=\"Tip\(\'\<strong\>([a-zA-Z0-9_-.<>]{1,})onmouseout=\"UnTip\(\)\"\>$#", $data2))
{
echo "$ok <br>";;
}

?>

Mais cela renvoie

Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 44

svp aidez moi !

Link to post
Share on other sites

Comme "-" désigne une "range" (comme A-Z), "_-." désigne "les caractères dont le code ASCII est compris entre _ et .". Or "." a un code ASCII inférieur à "_", donc ça couine. Et de toutes façons ce n'est pas ce que tu veux.

La bonne solution: dans une classe (quelque chose entre []), si tu veux inclure "-", il faut toujours le mettre au début.

Tant qu'on y est:

- le ^ et le $ impliquent que $data2 commence effectivement par onmouseover et finisse par UnTip()">, je ne suis pas sûr que ce soit effectivement ce que tu veux

- "{1,}" peut s'écrire "+", c'est quand même plus simple

- si tu utilises ' comme délimiteur pour ta chaîne, tu n'auras pas besoin d'escaper les ", ça fait trois \ de moins, c'est toujours ça de pris en lisibilité

- ta classe n'acceptera pas les caractères accentués. Tu peux avoir envie d'utiliser \w à la place de a-zA-Z0-9, c'est plus large. Ou carrément [^']+ pour tout prendre jusqu'au ' qui suit

- il te manque des choses avant le onmouseout, ta regex ne matchera jamais

Jacques.

Link to post
Share on other sites

Bonjour :)

Alors j'ai testé en prenant en considération les remarques...

J'ai fait :

<?php
$data2 = 'Code source d une page html';

// extraction de la partie souhaité
$pattern = preg_match_all('#id=[0-9]{9}" onmouseover="Tip\(\'<strong>[^\']+#i',$data2,$match2);

if ($pattern)
{
//On liste les résultats
foreach($match2[0] as $resultat)
{
echo "Extraction : ", $resultat, "\n <br>";
}
}
?>

Cela m'extrait bien :

id=100000028" onmouseover="Tip('<strong>Ciane Bau<br>Member GV: 205<br>Home Phone:+33200000009280<br>Email: trd974_AT_gail.com<br>Enroller: Dier Herez<br>Enroller GV: 1160<br>Enroller Email: <a href=mailto:djxxm27_AT_yoo.fr>djxxm27_AT_yoo.fr</a><br>Enroller Phone: +3300000528br><br>Click to view more details</strong>

Super cool ca marche :)

Sinon, je suis ok pour utiliser le simple quote en tant que délimiteur de chaîne, mais comment faire pour que dans mon texte (code source $data2) cela les échappe automatiquement ?

Ensuite, je souhaite récupérer les données correspondant à :

id=100000028 (juste les chiffres)

Ciane Bau

Home Phone:+33200000009280 (juste le numéro)

Member GV: 205 (juste les chiffres)

Email: trd974_AT_gail.com (juste le mail)

Enroller Email: <a href=mailto:djxxm27_AT_yoo.fr (juste le mail)

Enroller GV: 1160 (juste le nombre

Comment puis je faire cela?

Merci

Edited by joboy84
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...