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 :
Exemple :
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);
donne :
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> ...
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 !
Partager