OVH Cloud OVH Cloud

Traitement des chaines de carateres

7 réponses
Avatar
BZP
Bonjour,

J'ai un fichier qui contient des chaines de caratères.
Je cherche une syntaxe épurée pour faire le traitement suivant :

-Toto (Pouetpouet) et sa moman Tata (Prout)-
Devient
-Toto et sa moman Tata -

En gros enlever les parenthèses et ce qu'elles contiennent. J'ai des
pistes avec PCRE mais leur documentation
(http://fr.php.net/manual/en/reference.pcre.pattern.syntax.php) m'est
assez hermétique.

Merci de votre aide.

--
BZP

7 réponses

Avatar
Antoun
BZP wrote:
Bonjour,

J'ai un fichier qui contient des chaines de caratères.
Je cherche une syntaxe épurée pour faire le traitement suivant :

-Toto (Pouetpouet) et sa moman Tata (Prout)-
Devient
-Toto et sa moman Tata -


si tu pars du principe que tu n'as pas de parenthèse dans tes
parenthèses, tu peux utiliser ceci :

$nouvo = preg_replace('/([^)]*)s*/', '', $ancien) ;

ou encore cela :

$nouvo = preg_replace('/(.*?)s*/', '', $ancien) ;

explication des deux regex :

( une parenthèse ouvrante...
[^)]* ... suivis d'autant de caractères que possible différents
d'une parenthèse fermante...
) ... puis une parenthèse fermante
s* ... éventuellement suivies d'une série d'espaces
(ou équivalents)


( une parenthèse ouvrante...
.*? ... tous les caractères jusqu'à être bloqué
par l'élément suivant...
) ... une parenthèse fermante
s* ... éventuellement suivies d'une série d'espaces
(ou équivalents)

Avatar
Redy
Bonjour,

J'ai un fichier qui contient des chaines de caratères.
Je cherche une syntaxe épurée pour faire le traitement suivant :

-Toto (Pouetpouet) et sa moman Tata (Prout)-
Devient
-Toto et sa moman Tata -

En gros enlever les parenthèses et ce qu'elles contiennent. J'ai des
pistes avec PCRE mais leur documentation
(http://fr.php.net/manual/en/reference.pcre.pattern.syntax.php) m'est
assez hermétique.

Merci de votre aide.



Voici une solution

/*
Input : STRING
Output: STRING
Usage: Remove_Btwn_Brackets($yourString);
*/
function Remove_Btwn_Brackets($str="")
{
while(preg_match("!([^()]+)!",$str))
{
$str = trim(preg_replace("!(([^()]+))!","",$str));
}
return trim($str);
}

Avatar
Jean-Francois Ortolo
bzp wrote:
Bonjour,

J'ai un fichier qui contient des chaines de caratères.
Je cherche une syntaxe épurée pour faire le traitement suivant :

-Toto (Pouetpouet) et sa moman Tata (Prout)-
Devient
-Toto et sa moman Tata -

En gros enlever les parenthèses et ce qu'elles contiennent. J'ai des
pistes avec PCRE mais leur documentation
(http://fr.php.net/manual/en/reference.pcre.pattern.syntax.php) m'est
assez hermétique.

Merci de votre aide.



Bonjour

Mes deux cents...

Vous voulez remplacer tout pattern "([^)]+)" par rien ( "" )

Ce pattern signifie: tout ce qui suit une parenthèse ouvrante (
incluse dans le pattern ) ( ( antislashé je crois pour une expression
régulière ), qui soit différent d'un parenthèse fermante ( antislashée
), suivi d'un parenthèse fermante ( idem ). Dans ce cas, le + signifie "
au moins un caractère ". S'il est possible qu'il n'y ait aucun caractère
( les parenthèses peuvent se toucher ), il faut remplacer le + par une
astérisque *


// Logique, non ?
$chaine = "-Toto (Pouetpouet) et sa moman Tata (Prout)-";

// Dans le cas où les parenthèses
// ouvrantes et fermantes,
// doivent nécéssairement être séparées
// par quelque chose:
$chaine2 = str_replace("([^)]+)", "", $chaine);

// Dans le cas où les parenthèses
// ouvrantes et fermantes,
// oeuvent se toucher:
$chaine2 = str_replace("([^)]*)", "", $chaine);

Théoriquement $chaine2 contient ce que vous voulez... à condition que
les parenthèses soient "nestées" ( correctement formattées ).

Bien à vous.

Jean Francois Ortolo

--
Mon site donne des Statistiques
et des Historiques Graphiques gratuits
sur les Courses de Chevaux du PMU.
http://www.ortolojf-courses.com

Avatar
Marc Quinton
BZP wrote:

-Toto (Pouetpouet) et sa moman Tata (Prout)-
Devient
-Toto et sa moman Tata -


la fonction est preg_replace(), et l'expression reguliere
est tres certainement :

/(.+?)/

* si tu veux supprimer des parentheses vides, il faut remplacer + par *,
* le ? veut dire expression non gourmande.
* attention, non testé.

Avatar
fablezouave
salut

echo preg_replace('`(.*?)`s', '',
file_get_contents('tonfichier.ext'));
Avatar
bruno
pourquoi tu fait pas avec des for?? c'est plus simple :)

for ($i=0;$i<length($str; $i++) {
if ($str{$i}=="(") {
$j = $i;
while (!($str{$j}==")") {
$j++;
}
}
}

avec ca, tu rajout deux verif :
-si $j > count ($str) on bloque, et si a ce moment $str{$j}<>")", c
raté... :)

non?
Avatar
Jean-Francois Ortolo
Jean-Francois Ortolo wrote:
bzp wrote:

Bonjour,

J'ai un fichier qui contient des chaines de caratères.
Je cherche une syntaxe épurée pour faire le traitement suivant :

-Toto (Pouetpouet) et sa moman Tata (Prout)-
Devient
-Toto et sa moman Tata -

En gros enlever les parenthèses et ce qu'elles contiennent. J'ai des
pistes avec PCRE mais leur documentation
(http://fr.php.net/manual/en/reference.pcre.pattern.syntax.php) m'est
assez hermétique.

Merci de votre aide.



Bonjour

Mes deux cents...

Vous voulez remplacer tout pattern "([^)]+)" par rien ( "" )



Je modifie,
pour qu'il reste un espace entre les tokens séparés par le token à
supprimer.

Donc, le pattern devient: "[ ]*([^)]+)[ ]*"

Et, il faut le remplacer par un espace.

Donc, celà devient:

$pattern = "[ ]*([^)]+)[ ]*"; // Au moins un caractère
// entre les parenthèses
ou bien:
$pattern = "[ ]*([^)]*)[ ]*"; // Pas de condition

Et ensuite:
$chaine2 = str_replace($pattern, " ", $chaine);

Il est nécéssaire, s'il on veut rester simple, de supposer qu'il y a
au moins une parenthèse ouvrante, ou ( resp ) fermante, pour chaque
token à supprimer, qui soit précédée ou ( resp ) suivie d'un ou
plusieurs espaces. C'est théoriquement toujours le cas pour le type des
tokens indiqués.

Aussi simple que ça...

Bien à vous.

Jean Francois Ortolo

--
Mon site donne des Statistiques
et des Historiques Graphiques gratuits
sur les Courses de Chevaux du PMU.
http://www.ortolojf-courses.com