8768 sujets

Développement web côté serveur, CMS

Bonjour.

Je cherche à remplacer des lignes de paragraphes en une seule avec des <br/> en utilisant une expression régulière.

À partir de ça :

<p class="para">Ligne 1.</p>
<p class="para">Ligne 2.</p>
<p class="para">Ligne 3.</p>
<p class="para">Ligne 4.</p>


Je voudrais ça :

<p class="para">Ligne 1.<br/>
Ligne 2.<br/>
Ligne 3.<br/>
Ligne 4.</p>


Comme expression :

Rechercher : (<p class="para">)(.*?)(</p>)\n(<p class="para">)
Remplacer : \1\2<br/>\n

Mais il manque quelque chose puisque ça fonctionne uniquement avec un maximum de deux lignes.

Merci.
Non, c'était ma première idée mais si au-dessus du premier paragraphe "para" il y en a un d'une autre classe, il y passe également.
S’il y a bien un paragraphe sur chaque ligne, on peut essayer avec ça : (?<=<p class="para">.+)</p>\n<p class="para">.
C’est dans quel langage ? Pour moi, dans V.S. Code, ça marche.
En P.H.P. (< 7.3), le quantificateur + n’est pas accepté dans le « précédé par », donc la formule devient (?<=<p class="para">)(.+)<\/p>\n<p class="para"> (mais je ne sais pas s’il faut échapper la barre oblique), et le remplacement \1<br/>\n.
Modifié par Anedja (07 Jan 2024 - 15:24)
Dans aucun langage, expression régulière utilisée de manière simple dans tout logiciel les gérant.

Avec ta dernière formulation, j'obtiens ça :

<p class="para">Ligne 1.<br/>
Ligne 2.</p>
<p class="para">Ligne 3.<br/>
Ligne 4.</p>
Bonjour,

Je viens de me prêter au jeu et j'ai fait ceci : Regex101 (tout faux !)

Edit : ah non, ça ne va pas mon truc... je vais chercher un peu. Il y a un truc à rechercher du côté de l' "anticipation négative", mais je n'arrive pas à l'utiliser :
?!

Modifié par Olivier C (07 Jan 2024 - 14:47)
Hé mais du coup votre solution ça marche !
/(?<=<p class="para">)(.*)<\/p>\s<p class="para">/gm

Vous avez donc utilisé un "Positive Lookbehind"...

Je garderai ce snipet sous le coude pour moi aussi, ça peut toujours servir...

Merci.

PS : en HTML5 vous n'êtes pas obligé d'auto-fermer les balises :
<br/>

Devient :
<br>

Modifié par Olivier C (07 Jan 2024 - 15:54)
C'est donc ok avec ça :

Rechercher : (?<=<p class="para">)(.+)</p>\n<p class="para">
Remplacer : \1<br/>\n

À noter que pour le remplacement, j'utilise \ à la place de $ dans les éditeurs de texte (Xed et Sigil). Néanmoins, cette formulation ne fonctionne pas dans Xed ; elle retourne comme indiqué précédemment :

<p class="para">Ligne 1.<br/>
Ligne 2.</p>
<p class="para">Ligne 3.<br/>
Ligne 4.</p>

Ce qui n'est pas très grave puisque c'est dans Sigil que je compte l'utiliser.

Pour ce qui est du <br/> j'ajoute le / puisqu'il s'agit de XHTML.

Merci pour votre aide. Smiley smile
Modifié par Nerva (07 Jan 2024 - 17:33)