Aller au contenu

Remplacement dans une chaine


Sujets conseillés

Posté

Bonjour :)

Je souhaiterai remplacer dans une chaine (longue, comme un texte) tout caractère non alphabétique par un espace ?

Est ce que "é", par exemple, est considérée comme une lettre ? :blush:

Comment faire ? :unsure:

Merci énormément d'avance,

Poppy :hypocrite:

PS: je vous montrerai mon modeste projet qd il sera fini ;)

Posté

Salut Poppy, à tout hasard je te dirai d'utiliser la fonction:

<?

function formea($text)

{

$text=ereg_replace('expression régulière','ton espace', $text);

return $text;

} ?>

Dans un fichier à part puis ensuite tu l'appelles ainsi:

include(ton fichier);

echo formea(ton texte)

par contre il te faut trouver l'expression régulière qui te convient (mais en effet é est normalement considéré comme une lettre (enfin à mon avis :whistling: )

Posté

Salut,

Je ne sais pas si ereg_replace permettra de définir les caractères éventuellement accentués, mais l'utilisation de preg_replace le permettra probablement, comme indiqué dans le manuel php, à la description des fonctions PCRE :

Un caractère de "mot" sera une lettre, un chiffre ou le caractère souligné, c'est-à-dire un caractère qui pourra être une partie d'un mot Perl. La définition des lettres et chiffres est définie par les tables de caractères de PCRE, et peut varier suivant la table locale de caractère (voir "Tables de caractères locales ", ci-dessus. Par exemple, dans la configuration "français" ("fr"), certains caractères ont des codes supérieurs à 128, pour les caractères accentués, et ils seront compris par le méta-caractère \w.
Posté

Salut Poppy,

L'utilisation de ereg_replace et de classes de caractères POSIX devrait te permettre d'obtenir ce que tu cherches.

<?php
setlocale(LC_CTYPE,'fr_FR');
$chaine="Il fait 30° sous le soleil éblouissant de Marseille";
$chaine=ereg_replace("[^[:alpha:][:space:]]{2,}","beau",$chaine);
print $chaine;
?>

Donnera en impression: "Il fait beau sous le soleil éblouissant de Marseille"

Dans l'exemple ci-dessus, l'expression dit de remplacer toute chaîne non alpha ou espace comprenant 2 caractères au minimum par le mot beau ;)

Dan

Posté

Oui, c'est normal.. mais tu peux les rajouter dans l'expression, comme par exemple:

$chaine=ereg_replace("[^[:alpha:][:space:]éàèçù]","beau",$chaine);

La classe prédéfinir [:alpha:] comme [:space:] sont des raccourcis permettant d'éviter de lister les caractères.

Si tu veux uniquement remplacer les signes de ponctuation, tu peux utiliser [:punct:], ou encore [:cntrl:] pour les caractères de contrôle.

Dan

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...