|replace

  • Apparu en : SPIP 1.4

Het filter |replace gebruikt een regular expression (regexp) [1] om een bepaald doel uit een baken te verwijderen of aan te passen.

Wanneer het met een enkel argument wordt toegepast, gaat het om de verwijdering van dit doel.

Om bijvoorbeeld alle "notaXX" te verwijderen uit een tekst, is de notatie [(#TEXTE|replace{nota\d*})].

Wanneer een tweede argument aan het filter wordt toegevoegd, gaat het om een vervanging.
Om bijvoorbeeld overal «2005» of «2006» in de tekst te vervangen door «2007» schrijf je:

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

.

De argumenten kunnen ook uit eenvoudige tekst bestaan:
vervang overal «alom» door «overal»: [(#TEXTE|replace{alom, overal})]

Je kunt nog een derde parameter aan het filter toevoegen. Dit argument komt overeen met de op de regexp toe te passen options (of modifications):
[(#TEXTE|replace{^dit$, dat, UimsS})]

Andere voorbeelden:

-  Vervang de spaties in een titel door een streepje:

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

-  Vervang alles in een titel dat geen letter is door een streepje:

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

Vervang de à (a accent grave) in een titel (let op de enkele aanhalingstekens) :

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

Verwijder een punt aan het eind van een titel:

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

Verwijder overbodige leestekens en spaties. Plaats een streepje:

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

Let op :
Wanneer het niet mogelijk is een klasse van tekens te declareren als argument voor het filter, zal |replace{[0-9]+} een compilatiefout genereren door de aanwezigheid van de rechte haakjes [ en ],
Toch kun je complexe regexp schrijven door gebruik te maken van een tekenklasse door deze vooraf te declareren:

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

Lees ook het filter |match.

Voetnoot

[1Je leest er ook over op Wikipedia in: Regular_expression

Auteur Hanjo Gepubliceerd op:

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