|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Membre chevronné
![]() Jérémy Étudiant Inscription : mars 2005 Messages : 634 ![]() |
![]() Petite question au sujet des expressions régulières. Pour l'écriture d'un parseur, je souhaite supprimer des balises <br /> qui se mettent dans une liste <ul> ou <ol>, ce qui rend le code html non valide. Exemple : Code html :
J'ai trouvé l'expression régulière pour supprimer les <br />, mais comment faire pour ne les supprimer que dans les balises <ul>...</ul> ou <ol>...</ol> ? J'ai essayé plusieurs codes mais ça ne marche pas. Code :
|
||||
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 918 ![]() |
Il te faut utiliser le modificateur U (ungreedy) pour récupérer les balises une par une.
Essaye Code :
$text = preg_replace(#(<ul>*)(<br />)(.*</ul>)`Usi','\\1 \\3', $text); |
|
|
00
|
|
|
#3 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Code :
$text = preg_replace('#(<ul.*)(<br />)(.*</ul>)#Usi','$1$3', $text); De plus, je préfère "<ul.*" au cas où il y aurait une mention de style, de classe, etc... Et pourquoi un espace en replacant $1 et $3 ? |
|
|
00
|
|
|
#4 | |||
|
Membre chevronné
![]() Jérémy Étudiant Inscription : mars 2005 Messages : 634 ![]() |
Citation:
Code :
Code :
$text = preg_replace('#(<ul.*)(<br />)(.*</ul>)#Usi','$1$3', $text); |
|||
|
|
00
|
|
|
#5 | ||||||
|
Membre chevronné
![]() Jérémy Étudiant Inscription : mars 2005 Messages : 634 ![]() |
En fait en mettant
Code :
Code html :
Au lieu de Code html :
|
||||||
|
|
00
|
|
|
#6 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Nous sommes bien d'accord que $text contient bien tout le code ?
Pas que la première ligne... |
|
|
00
|
|
|
#7 | ||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Nan, je crois savoir.
Notre regexp chope un <br /> et pense avoir fini. Il faut trouver un truc pour qu'elle se répète. Essaies juste ça : Code :
Je m'aperçois que c'est pas encore ça. Je l'ai sur le bout de la langue, mais c'est l'heure de débaucher. Ad taleur peut-être... |
||
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() Jérémy Étudiant Inscription : mars 2005 Messages : 634 ![]() |
Merci ça marche enfin !
.![]() Edit : bizarre chez moi ça marche
|
|
|
00
|
|
|
#9 | |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Citation:
|
|
|
|
00
|
|
|
#10 | |
|
Membre chevronné
![]() Jérémy Étudiant Inscription : mars 2005 Messages : 634 ![]() |
Citation:
|
|
|
|
00
|
|
|
#11 | ||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Je vais essayer plusieurs trucs.
Le premier : Code :
|
||
|
|
00
|
|
|
#12 | ||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Le deuxième :
Code :
|
||
|
|
00
|
|
|
#14 | ||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
NAN !
On va y arriver ! Et ça ? Code :
|
||
|
|
00
|
|
|
#15 | |||||
|
Membre habitué
![]() Inscription : décembre 2006 Messages : 109 ![]() |
Citation:
Code :
|
|||||
|
|
00
|
|
|
#16 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
En fait non, une fois que les bonnes expressions seront repérées, je compte plutôt utiliser des tableaux de correspondance. Question de goût, je trouve ça plus smart, mais ce n'est qu'un avis. |
|
|
00
|
|
|
#17 |
|
Membre chevronné
![]() Jérémy Étudiant Inscription : mars 2005 Messages : 634 ![]() |
Et bien en fait la solution de daniel61 fonctionne, mais celle de jml94 avec les deux expressions non. Elles sont censées être équivalentes ? En tout cas la dernière solution fonctionne.
|
|
|
00
|
|
|
#18 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Bah, si tu as le choix entre quelque chose qui marche et une autre qui marche pas...
Well done Daniel ! J'avais même pas lu ta belle regexp, bloqué que j'étais sur mon idée de tableaux. C'est quand même bô une regexp comme ça, nan ?
|
|
|
00
|
|
|
#19 | ||
|
Membre habitué
![]() Inscription : décembre 2006 Messages : 109 ![]() |
Citation:
la différence est qu'avant de poster il y avait un <br /> au centre et j'ai pensé de le remplacer par .* donc elle enlève tout sauf la mise en forme... donc aucun élément (X)HTML ne seront tolérés à ces endroits pas plus que du texte... seul <li></li> et ce qu'ils contiennent seront entre <ul></ul> et <ol></ol>... à tester tout de même. Citation:
|
||
|
|
00
|
|
|
#20 | ||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Je vais essayer de décortiquer un peu ce joli lancé de daniel61. Code :
[^>]* : tout caractères sauf ">" ?: : parenthèse de regroupement seul, sans capture (?:</li>|<[ou]l[^>]*>) : on repère </li> ou <ol...> ou <ul...> sans capturer ((?:</li>|<[ou]l[^>]*>)\s*) : on repère </li> ou <ol...> ou <ul...> suivi de blancs et on capture en $1 (<li[\s>]|</[ou]l>) : on repère <li> ou <li > ou </ol> ou </ul> et on capture en $2 (\s*(<li[\s>]|</[ou]l>)) : on repère <li> ou <li > ou </ol> ou </ul> précédés de blancs et on capture en $3 entre les deux, on prend tout et on ne capture pas Donc on va remplacer tout ce qui se trouve entre </li>, <ol...> ou <ul...> et <li> ou <li > ou </ol> ou </ul>, le tout en "ungreedy". (merci le Camel Book) Cette expression est très belle, mais il y a encore un peu d'amélioration à apporter je pense. Après une bonne prise de tête, je vais prendre un café avec les collègues et je reviens voir ce qu'on peut faire. PS : pour ce genre d'expressions non-triviales, tu peux aussi demander dans le forum Perl. Ces garçons un peu extra terrestres sont souvent bilingues en regexp. |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com