Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2008, 17h20   #1
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
Par défaut Aide pour un motif avec preg_replace()

Bonjour,

j'ai un fichier PHP me permettant de tester mon expression régulière.

Code :
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>test lexique</title>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" />
<meta http-equiv="Pragma" content="no-cache" />
<style type="text/css">
body {
	color:#CC0000;
	font-family:"Courier New", Courier, monospace;
}
span {
	color:#33CC66;
}
</style>
</head>
<body>
 
<?php
 
$terme = "AB";
 
$texte = "*** OUI ***<br />";
 
$texte .= "oui pour &gt;'AB'&lt;"."<br />";
$texte .= "oui pour &gt;'Ab&lt;"."<br />";
$texte .= "oui pour &gt;'aB &lt;"."<br />";
$texte .= "oui pour &gt;AB'&lt;"."<br />";
$texte .= "oui pour &gt; AB'&lt;"."<br />";
 
$texte .= "<br />";
 
$texte .= "oui pour &gt;’Ab’&lt;"."<br />";
$texte .= "oui pour &gt;’aB&lt;"."<br />";
$texte .= "oui pour &gt;’ab &lt;"."<br />";
$texte .= "oui pour &gt;AB’&lt;"."<br />";
$texte .= "oui pour &gt; AB’&lt;"."<br />";
 
$texte .= "<br />*** NON ***<br />";
 
$texte .= "non pour &gt;aAB&lt;"."<br />";
$texte .= "non pour &gt;aAB &lt;"."<br />";
$texte .= "non pour &gt;ABb&lt;"."<br />";
$texte .= "non pour &gt; ABb&lt;"."<br />";
 
$texte .= "<br />";
 
$texte .= "non pour &gt;éAB&lt;"."<br />";
$texte .= "non pour &gt;éAB &lt;"."<br />";
$texte .= "non pour &gt;ABé&lt;"."<br />";
$texte .= "non pour &gt;àAB&lt;"."<br />";
$texte .= "non pour &gt;ABà&lt;"."<br />";
$texte .= "non pour &gt;çABç&lt;"."<br />";
 
$motif = "`([\W\s])(".$terme.")([\W\s])`i";
$texte = preg_replace($motif, '$1<span>$2</span>$3', $texte);
 
echo $texte;
?>
</body>
</html>
sauf que mon motif ne fonctionne pas à tous les cas...

C'est à dire, qu'au lieu d'avoir :
Citation:
*** OUI ***
oui pour >'AB'<
oui pour >'Ab<
oui pour >'aB <
oui pour >AB'<
oui pour > AB'<

oui pour >’Ab’<
oui pour >’aB<
oui pour >’ab <
oui pour >AB’<
oui pour > AB’<

*** NON ***
non pour >aAB<
non pour >aAB <
non pour >ABb<
non pour > ABb<

non pour >éAB<
non pour >éAB <
non pour >ABé<
non pour >àAB<
non pour >ABà<
non pour >çABç<
j'ai :
Citation:
*** OUI ***
oui pour >'AB'<
oui pour >'Ab<
oui pour >'aB <
oui pour >AB'<
oui pour > AB'<

oui pour >’Ab’<
oui pour >’aB<
oui pour >’ab <
oui pour >AB’<
oui pour > AB’<

*** NON ***
non pour >aAB<
non pour >aAB <
non pour >ABb<
non pour > ABb<

non pour >éAB<
non pour >éAB <
non pour >ABé<
non pour >àAB<
non pour >ABà<
non pour >çABç<
Merci d'avance... car là j'avoue je ne vois pas pourquoi...
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 18h40   #2
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 571
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 571
Points : 2 511
Points : 2 511
Salut, tu peux nous dire ce que tu souhaites faire ? Le résultat que tu attends, ce que tu obtiens à la place... Ca sera plus simple pour nous t'aider
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 19h31   #3
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
Désolé je pensais avoir été clair avec mes exemples...

j'aimerais que mon expression régulière ajoute le balise <SPAN> dans certains cas (les lignes avec oui) et pas dans d'autres (les lignes avec non).

En gros, je souhaite détecter une chaine parmi d'un texte à certaines conditions comme :
- le terme "ea" ne doit être détecté dans "eau" ni dans "l'eau" ni dans "marteau"...
- le terme "ea" doit être déctecté dans " ea ", ".e.a.", "(ea)", ",ea", "ea:", etc...

Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 21h43   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
C'est un problème de locale. Quand aucune locale n'est fixé, les lettres accentuées sont considérées comme des caractères spéciaux (donc, des \W) et non des lettres.

Il suffit que tu mettes une locale pour les lettres accentuées deviennent des lettres (des \w). Ça se fait avec setlocale.

Tu peux également utiliser \b pour désigner une limite de mot, ce sera une alternative plus simple et plus exacte à [\W\s].
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 11h20   #5
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
je comprends pas bien ce qu'est une "locale" ...

Code :
1
2
$motif = "`(\b)(".$terme.")(\b)`i";
$texte = preg_replace($motif, '$1<span>$2</span>$3', $texte);
donne exactement le même résultat.
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 12h12   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par Tchupacabra Voir le message
je comprends pas bien ce qu'est une "locale"
Une locale définit un ensemble de paramètres dits "de localisation", tels que le séparateur décimal, la devise par défaut, la langue à utiliser pour les noms des mois ou des jours de la semaine, etc. Pour ce qui concerne les regex, ça influe essentiellement sur la reconnaissance des caractères, par exemple en déterminant ce qui est \w ou \W.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 15h30   #7
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
la détection REGEX avec cette même page encodée en ISO-8859-1 fonctionne parfaitement !

est-ce que je suis obligé d'encoder mon texte avant preg_replace() ?
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 17h37   #8
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Parce que si tu n'encodes pas tu es en quoi ? en UTF-8 ?

RTFM pour savoir si les preg comprennent correctement l'Unicode.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 23h19   #9
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
ma page est entièrement en UTF-8...
la doc PHP n'est pas très clair sur l'UTF-8, je trouve rien d'interessant.

Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 11h57   #10
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
j'ai trouvé quelque chose d'intéressant sur ce site http://www.expreg.com/options.php
Il y a l'option u qui permettrai de traiter les chaines UTF-8...
Citation:
u (PCRE_UTF8)
Cette option désactive les fonctionnalités additionnelles de PCRE qui ne sont pas compatibles avec Perl. Les chaînes sont traitées comme des chaînes UTF-8. Cette option est disponible en PHP 4.1.0 et plus récent.
Effectivement j'ai testé et cela fonctionne avec mes tests.
Avec le peu d'info à ce sujet, j'ai peur pour la fiabilité de cette option...

Qu'en pensez-vous ? Vous avez des commentaires sur cette option ?
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h03.


 
 
 
 
Partenaires

Hébergement Web