Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2127 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [php - regex] Remplacer tous les & saufs certains.

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php - regex] Remplacer tous les & saufs certains.

n°584178
belgique
Posté le 06-12-2003 à 00:34:05  profilanswer
 

VOilà, je veux remplacer tous les & par des & sauf les & suivis de chiffres et de ; . Ex &1256;.
 
Je sais comment nier une classe [^0-9] mais ça ne m'avance pas.
J'ai pensé à remplacer d'office tous les "&" en et "&" et par après remplacer les "&[0-9]?;" par la même chose avec un simple &.
 
N'y a-t-il pas plus efficace.

mood
Publicité
Posté le 06-12-2003 à 00:34:05  profilanswer
 

n°584308
Mara's dad
Yes I can !
Posté le 06-12-2003 à 10:04:55  profilanswer
 

T'as essayé htmlentities() ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°584416
belgique
Posté le 06-12-2003 à 13:22:15  profilanswer
 

Oui, en fait certains navigateurs me renvoient le signe euro de manière correcte en &xxxx; j'ai oublié le numméro :). Et htmlentities remplace tous les & par et &. Ce que je veux faire c'est un remplacement sélectif qui ne remplace pas les & suivis de quelques chiffres et de ;.

n°584418
void_ppc
Posté le 06-12-2003 à 13:25:14  profilanswer
 

est-ce que les chiffres suivant le & sont toujours 4 ?

n°584421
belgique
Posté le 06-12-2003 à 13:30:19  profilanswer
 

oui, on peut le voir comme ça :)
En fait c'est pas le cas mais si tu as une slouce avec 4, je prends ;)


Message édité par belgique le 06-12-2003 à 13:30:59
n°584432
void_ppc
Posté le 06-12-2003 à 13:41:40  profilanswer
 

En fait ce qu'il faut absolument pour le faire avec une expression régulière c'est le format exact que peut avoir ta chaîne
 
Par 'exact' j'entends toutes les formes pour lesquelles tu veut faire une correspondance

n°584433
belgique
Posté le 06-12-2003 à 13:42:57  profilanswer
 

Ca c'est pas un problème. Ma question est de dire par exemple: tu me remplace tous les & sauf ceux suivis de 4 chiffres :/

n°584437
void_ppc
Posté le 06-12-2003 à 13:43:44  profilanswer
 

Voilà ce que je voulais :)

n°584444
bobe
Posté le 06-12-2003 à 13:52:11  profilanswer
 

Code :
  1. $str = preg_replace('/&(?![#0-9a-z]+;)/i', '&', $str);


 
ça devrait le faire avec ça.


Message édité par bobe le 06-12-2003 à 13:52:59
n°584446
belgique
Posté le 06-12-2003 à 13:54:34  profilanswer
 

Saleté, mon livre qui parle des regexp est un peu court :/ . Merci, je vais chercher de comprendre la doc qui explique le ?!, je suppose que c'est pour nier ce qu'il y a entre ()

mood
Publicité
Posté le 06-12-2003 à 13:54:34  profilanswer
 

n°584451
bobe
Posté le 06-12-2003 à 13:59:15  profilanswer
 

c?est une assertion positive. Littéralement, mon regexp signifie:
 
remplace toutes les éperluettes qui ne sont pas suivies de lettres, chiffres ou du dièze (caractères qui composent les entités définies dans le (x)html, les entités numériques ou héxadécimales) puis d?un point virgule.
 
il y en a quatre:
 
assertion positive: pattern(?=sub-pattern) - doit être suivi de
assertion négative: pattern(?!sub-pattern) - ne doit pas être suivi de
assertion arrière positive: (?<=sub-pattern)pattern - doit être précédé de
assertion arrière négative: (?<!sub-pattern)pattern - ne doit pas être précédé de
 
Voilou :)

n°584455
belgique
Posté le 06-12-2003 à 14:04:18  profilanswer
 

Un grand merci, c'est exactement ce que je cherchais :)

n°584457
bobe
Posté le 06-12-2003 à 14:05:32  profilanswer
 

(Désolé, je suis un peu perfectionniste)  
C?est plus stricte comme ça:
 

Code :
  1. $str = preg_replace('/&(?!(#[0-9]{2,5}|#x[0-9a-f]{2,5}|[a-z]+);)/i', '&amp;', $str);


 
Par contre, je suis pas sur pour le minimum et maximum de chiffres (et lettres) dans le cas d?une entité numérique (ou héxadécimale).


Message édité par bobe le 06-12-2003 à 14:08:01
n°584468
belgique
Posté le 06-12-2003 à 14:16:21  profilanswer
 

Voilà ce que j'ai fait :).


$from[]="'&(?!#[0-9]{1,4};)'i";
$to[]='&amp;\\1';


Je traiterai eventuellement le cas des &euro; mais je n'ai jamais vu de navigateurs envoyant celà :).
Je n'ai plus qu'à remplacer les caractères ? windows par une entité valide :).

n°584482
belgique
Posté le 06-12-2003 à 14:25:34  profilanswer
 

Oups, je n'avais pas vu que tu avais posté avant moi. :). Je pensais faire un truc comme tu l'as fait. Merci de me découper le travail de la sorte :).

n°584484
belgique
Posté le 06-12-2003 à 14:28:02  profilanswer
 

Maintenant que je regarde ton truc, je trouve que ça manque de parenthèses :p.
 
Voilà ma dernière version :


'&(?!(#[0-9]{1,4})|(#x[0-9a-f]{2,5})|([a-zA-Z])+;)'


 :).
Celà dit j'hésite à inclure les &euros et autres comme je l'ai fait.  


Message édité par belgique le 06-12-2003 à 14:32:58

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [php - regex] Remplacer tous les & saufs certains.

 

Sujets relatifs
traiter le point du pavé numerique (remplacer par une virgule?)regex,: detecter un espace
Pb avec un RegEx[VB. NET] Effectuer un rechercher / remplacer ds un doc. Word
[CMD] remplacer un fichier par une version plus ancienne ?[VBA] Remplacer du texte par un champ Word
remplacer les transactions sur MySQL et PHP[JAVA] regex (Pattern) : pb synthaxe pour 'split'
[XHTML] Comment remplacer une "script frame" ??Les regex, quel cauchemard..
Plus de sujets relatifs à : [php - regex] Remplacer tous les & saufs certains.


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR