|replace

Le filtre |replace utilise une expression rationnelle [1] pour supprimer ou remplacer toutes les occurences d’un motif dans la balise.

  • Apparu en : SPIP 1.4

Exemples

Utilisé avec un seul paramètre, une expression régulière, le motif sera supprimé.

Pour supprimer tous les "notaXX" du texte

[(#TEXTE|replace{nota\d*})]

 

Lorsqu’un deuxième paramètre est fourni, les occurrences du motif seront remplacées par cette valeur.
Par exemple pour remplacer tous les « 2005 » ou « 2006 » du texte par « 2007 » :

[(#TEXTE|replace{200(5|6), 2007})]

 

Les arguments du filtre peuvent n’être que de simples textes :
remplacer tous les « au temps » par « autant » :

[(#TEXTE|replace{au temps, autant})]

 

Il est possible de capturer des valeurs dans l’expression régulière en 1er argument, et le 2eme argument peut faire référence aux valeurs capturées.
Exemple pour extraire le nom d’un fichier à partir de son chemin complet :

[(#FILE|replace{^.*/\(\[^/\]*\)$,$1})]

Un troisième paramètre correspond aux options (ou modificateurs) à appliquer à la regexp :

[(#TEXTE|replace{^ceci$, cela, UimsS})]

La valeur par défaut de ce 3ème paramètre est UimsS.

Autres exemples

Remplacer les espaces d’un titre par un tiret :

[(#TITRE|replace{\h,-,S})]

 

Remplacer tout ce qui n’est pas une lettre dans un titre par un tiret :

[(#TITRE|replace{\P{L},-,S})]

 

Supprimer le à (a accent grave) d’un titre (noter les guillements simples) :

[(#TITRE|replace{\xe0,'',S})]

 

Supprimer le point à la fin d’un titre :

[(#TITRE|replace{\.$,'',S})]

 

Supprimer les ponctuations et les espaces inutiles. Placer un tiret :

[(#TITRE|replace{( |\p{P}|\h)+,-,S})]

 

Attention :
Déclarer une classe de caractères comme argument du filtre |replace{[0-9]+} produira une erreur de compilation due à la présence des crochets [ et ].
Pour contourner ce problème, à partir de SPIP 3.0 il faut échapper les crochets à l’aide d’un antislash "\", ce qui donne :

|replace{\[0-9\]+}

Pour SPIP 2.1 et les versions antérieures, il est possible d’écrire des regexp complexes utilisant les classes de caractères en les définissant préalablement :

#SET{ma_regexp, ^[[:space:]]*([0-9]+)([.)]|Â?°)[[:space:]]+}
[(#DESCRIPTIF|replace{#GET{ma_regexp}, __, Uims})]

Voir aussi

Notes

[1ne pas hésiter à consulter la page wikipedia dédiée : Expression_rationnelle

Auteur denisb, JLuc, Teddy Publié le : Mis à jour : 18/12/23

Traductions : català, English, Español, français, Nederlands