REGEX

massacr Messages postés 233 Date d'inscription vendredi 2 juillet 2004 Statut Membre Dernière intervention 4 janvier 2007 - 23 nov. 2005 à 19:58
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 - 24 nov. 2005 à 10:46
Bonjour


Je débute en expressions régulières, et je suis confronté à un problème.



Je dispose de ceci dans une variable :



Récit expressif,

Positif expressif,

Grand orgue,

Pédalier,

----

Bourdon 16

cor de nuit 8

flûte traversière 8

gambe 8

voix celeste 8

flûte 4

octavin 2

cornet 5 rangs

cor anglais 16

hautbois 8

trompette harmonique 8

clairon 4, voix humaine 8

tremblant

,

quintaton 16

cor de nuit 8

flutes 8 et 4

salicional 8

prestant 4

quartede nasard 2

nasard

tierce

plein jeu 3 rangs

clarinette 8

trompette 8

,

Montres 16 et 8

bourdon 8

flute harmonique 8

violon 8

prestant 4

doublette 2

cymbale 4 rangs

fourniture 5 rangs

basson 16

trompette 8

clairon 4

,

contrebasse 16

soubasse 16

flute 8

flute 4 bombarde 16

trompette 8




Et je voudrais arriver à ceci :



Récit expressif,

Positif expressif,

Grand orgue,

Pédalier,

----

<li>Bourdon 16
</li>

<li>cor de nuit 8</li>

<li>flûte traversière 8</li>

<li>gambe 8</li>

<li>voix celeste 8v

<li>flûte 4</li>

<li>octavin 2</li>

<li>cornet 5 rangs</li>

<li>cor anglais 16</li>

<li>hautbois 8</li>

<li>trompette harmonique 8</li>

<li>clairon 4, voix humaine 8</li>

<li>tremblant</li>

,

<li>quintaton 16</li>

<li>cor de nuit 8</li>

<li>flutes 8 et 4</li>

<li>salicional 8</li>

<li>prestant 4</li>

<li>quartede nasard 2</li>

<li>nasard</li>

<li>tierce</li>

<li>plein jeu 3 rangs</li>

<li>clarinette 8</li>

<li>trompette 8</li>

,

<li>Montres 16 et 8</li>

<li>bourdon 8</li>

<li>flute harmonique 8</li>

<li>violon 8</li>

<li>prestant 4</li>

<li>doublette 2</li>

<li>cymbale 4 rangs</li>

<li>fourniture 5 rangs</li>

<li>basson 16</li>

<li>
trompette 8</li>

<li>
clairon 4</li>

,

<li>
contrebasse 16</li>

<li>
soubasse 16</li>

<li>
flute 8</li>

<li>
flute 4 bombarde 16</li>

<li>
trompette 8</li>




Que dois-je utiliser ???

Merci de m'aider.

A bientôt

13 réponses

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 nov. 2005 à 20:13
Salut...



J'aime bien ce genre de petit problème, car il y'a souvent une solution simple est efficace...



Si ton but est de juste transformer ce texte :



$texte = /* tout ton texte */;



// on sépare les lignes

$ligne = explode("\n", $texte);



// on parcours chaque ligne

foreach($ligne as $k=>$v) {

// si c'est un tag HTML, passe !

$t = trim($v);

if( $t{0}=='<' or $t{strlen($t)-1}=='>' ) continue;



// sinon on transforme

$ligne[$k] = "<li>$v</li>";

}



// et voilà :)

$texte = implode($ligne);
0
massacr Messages postés 233 Date d'inscription vendredi 2 juillet 2004 Statut Membre Dernière intervention 4 janvier 2007
23 nov. 2005 à 20:53
Salut

Merci pour ta réponse rapide.

Mais en fait, je n'ai donné qu'une partie du code (je ne pensais pas qu'il fallait l'autre).

Mon texte à transformé est plutot ca :




blablablablablablablablablablablablablablablablablablablablablablablab

lablablablablablablablablablablablablablabla

blablablablablablablablablablablablablablablablablabla

blablablablablablablablablablablav


LE TABLEAU


blablablablablablablablablablablablablablabla

blablablablablablablablablablablablablablablabla

blablablablablablablablablablablablablablablablablablablablablablablablablablablabla

blablablablablablablablablablabla

blablablablablablabla

blablablablablablablablablablablabla




Et je dois transformer toutes les listes qui sont entre et .

Comment faire pour ne garder qu'elles ?

C'est pour ca que je pensais que j'aurais besoin des regex.

As tu une solution ?
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 nov. 2005 à 21:03
Alors là oui, il te faut utiliser les regexp...



dont je suis pas vraiment maitre...





un truc du genre @(.*)@im

Te sortira tout ce qui se trouve entre les balises ul

(im c'est pour "insensible à la casse et multiligne")



au cas où soit spécifiées des attributs dans les ul :

$regle = @(.*)@im



Bon, puis après un

$arr = array();

preg_match_all($texte, $regle, &$arr);



devrait te pondre un tableau tout fou où le résultat attendu est dans :

foreach($arr[1] as $n=>$ul) {

// dans $ul un contenu d'un

}



En gros... ça donne ça ! Mais je ne garanti pas le bon fonctionnement de ma règle.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 nov. 2005 à 21:05
il y'a un espace de trop ici :



$regle = @(.*)@im



Ah sa joue très fin les regexp... !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
massacr Messages postés 233 Date d'inscription vendredi 2 juillet 2004 Statut Membre Dernière intervention 4 janvier 2007
23 nov. 2005 à 21:29
Ca ne marche pas.

Le problème est qu'il recherche nimportequoi au lieu de nimportequoi entouré de .

Connais tu la solution ?
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 nov. 2005 à 21:35
fait un coup de





str_replace(' ','&nbsp;&nbsp;',nl2br(var_export($arr, true)));





est regarde la composition du tableau de resultat...

le nimportequoi est le resultat global



Mais sous d'autre indexe de $arr, tu trouvera ce qu'il y'a à l'intérieur des
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 nov. 2005 à 21:36
echo str_replace(' ','&nbsp;&nbsp;',nl2br(var_export($arr, true)));
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 nov. 2005 à 21:42
$regle = @(.*)@im



ceci devrait suffir...
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 nov. 2005 à 21:50
note en passant : connais-tu la balise <th> ?



<tr id="titretableau">
<td>Récit expressif</td>
<td>Positif expressif</td>
<td>Grand orgue</td>
<td>Pédalier</td>
</tr>




C'est justement pour pouvoir donner un style particulier aux entêtes de tableau (th = Table Header).



<tr>
<th>Récit expressif</th>
<th>Positif expressif</th>
<th>Grand orgue</th>
<th>Pédalier</th>
</tr>


puis tu fais un CSS comme ça :



th {

font-weight:bold;

/* ... */

}
0
massacr Messages postés 233 Date d'inscription vendredi 2 juillet 2004 Statut Membre Dernière intervention 4 janvier 2007
23 nov. 2005 à 22:23
Bonne idée pour th..



Mais ta méthode ne marche toujours pas. Il n'y a rien dans le tableau $arr.

Je te passe mon script :



$_POST['texte']*****************************

Histoire




Cet instrument, à l'origine, date de 1876, et
fut construit par le grand facteur Merklin. Après bien des vissicitudes
(une restauration extrêment contestable en 1946, puis un
empoussièrement considérable du à l'édification de tribunes latérales),
une restauration complète fut décidée en accord avec les différents
curés de Saint Pothin, Bernard Théveniau, Michel Desvignes et Gilbert
Sanchez. Le tout piloté par l'association des amis de l'orgue, présidée
avec brio et efficacité par Jacques Renault, puis André-Louis Appaix.
Jacques Renault assuma entièrement la responsabilité de la
restauration, tandis que son successeur s'occupe activement de la mise
en valeur(concerts, visites guidées,etc...).

Vous pouvez voir quelques photos de l'orgue ici : [index.php?demande= 4 accéder à la galerie photo]




Composition




Grâce au génie du facteur Daniel Kern, nous
avons à présent retrouvé un magnifique instrument symphonique de 43
jeux (qui deviendront 46 dès que nos finances le permettront):




Récit expressif,

Positif expressif,

Grand orgue,

Pédalier,

----

Bourdon 16

cor de nuit 8

flûte traversière 8

gambe 8

voix celeste 8

flûte 4

octavin 2

cornet 5 rangs

cor anglais 16

hautbois 8

trompette harmonique 8

clairon 4, voix humaine 8

tremblant

,

quintaton 16

cor de nuit 8

flutes 8 et 4

salicional 8

prestant 4

quartede nasard 2

nasard

tierce

plein jeu 3 rangs

clarinette 8

trompette 8

,

Montres 16 et 8

bourdon 8

flute harmonique 8

violon 8

prestant 4

doublette 2

cymbale 4 rangs

fourniture 5 rangs

basson 16

trompette 8

clairon 4

,

contrebasse 16

soubasse 16

flute 8

flute 4 bombarde 16

trompette 8




Tous accouplements et tirasses en 8, + récit sur lui même en 16, et récit sur grand orgue en 16.

On notera la présence d'un combinateur électonique très efficace:
16x16x8=1248 ! avec séquenceurs aller-retour, aux manuels et au
pédalier.




Le titulaire




Titulaire de l'orgue de St Pothin, Loic Maillié, biographie, photo, etc...


***********************************



preg_match_all('!(.*)!im', $_POST['texte'], $arr);

print_r($arr);



Il affiche :


Array
(
[0] => Array
(
)

[1] => Array
(
)

)
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 nov. 2005 à 22:48
Tiens, j'ai trouvé ça : @([\w\s]*)@im



les résultats se trouve dans $arr[1];





par aileur, je te donne mon script qui test les regexp, comme ça tu pourras faire ta propre cuisine :

<?php

$regexp = stripslashes(isset($_POST['regexp']) ? $_POST['regexp'] : '');

$texte = stripslashes(isset($_POST['texte']) ? $_POST['texte'] : '');

?>

<hr />

<form method="post">

RegExp = " size="32" />


Texte =


<textarea name="texte" rows="15" cols="48"
/><?=htmlspecialchars($texte);?></textarea>




</form>

<hr />

Resultat


<?php

$res = array();

preg_match_all($regexp,$texte,&$res);

echo str_replace(' ', '&nbsp;&nbsp;',nl2br(htmlspecialchars(stripslashes(var_export($res,true)))));

?>





A+
0
massacr Messages postés 233 Date d'inscription vendredi 2 juillet 2004 Statut Membre Dernière intervention 4 janvier 2007
24 nov. 2005 à 10:40
Ok, maintenant ca marche.

Mais j'aimerais rajouter des <li>blabla</li>. La seule
particularité de chaque ligne est qu'elle débute par une majuscule.
Qu'elle manipulation effectuer sur chaque ul ???
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
24 nov. 2005 à 10:46
Si ton but est de juste transformer ce texte :



$texte = /* tout ton texte */;



// on sépare les lignes

$ligne = explode("\n", $texte);



// on parcours chaque ligne

foreach($ligne as $k=>$v) {

// si c'est un tag HTML, passe !

$t = trim($v);

if( $t{0}=='<' or $t{strlen($t)-1}=='>' ) continue;



// sinon on transforme

$ligne[$k] = "<li>$v</li>";

}



// et voilà :)

$texte = implode($ligne);
0
Rejoignez-nous