Optimiser/"factoriser" un masque regex
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:
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:
1 2 3 4 5
| <ul>
<li>sdg sdfg sdfgsd</li>
<li></li>
</ul>
... |
donne :
Code:
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 !