Bonjour,
pour mes Fonctions de troncature de texte, j'ai besoin d'optimiser, si possible, une regex :
=> si les points de suspension sont après une(des) balise(s) fermante(s),
on les "remonte" jusqu'à l'intérieur de la balise non-vide la plus proche (ici jusqu'à 5 niveaux de balises).

Voici mon masque actuel :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
	$PointSuspension 	= '...';
	$texte	.= 'ReplacePointSuspension'; // (provisoire)
	$pattern	= '#((</[^>]*>[\n\t\r ]*)?(</[^>]*>[\n\t\r ]*)?(</[^>]*>[\n\t\r ]*)?(</[^>]*>[\n\t\r ]*)?(</[^>]*>)[\n\t\r ]*ReplacePointSuspension)#i';
	// Explication du masque : ((</[^>]*>[\n\t\r ]*)?
	// </[^>]*>	: toute balise fermante
	// [\n\t\r ]*	: passage(s) à la ligne/tabulation(s)/espace(s)
	$texte	= preg_replace($pattern, $PointSuspension.'${2}${3}${4}${5}${6}', $texte);
Exemple :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<ul>
  <li>sdg sdfg sdfgsd</li>
  <li></li>
</ul>
...
donne :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
<ul>
  <li>sdg sdfg sdfgsd</li>
  <li>...</li>
</ul>

Question :
  • Est-il possible de "factoriser" les (</[^>]*>[\n\t\r ]*)? ? (les 4 premiers du masque, le 5ème étant requis)
  • Tout en récupérant '${2}${3}${4}${5}${6}' (ou quelle autre syntaxe ?)


Merci !