La balise permet de fragmenter une chaine en fonction de séparateurs ou de caractères spéciaux.
4 utilisations sont possibles selon le découpage souhaité:
Pour séparer une valeur en fonction de séparateurs connus, il faut utiliser l’attribut « format="séparateur/variable" ». Le découpage peut être effectué partiellement si le séparateur n'est pas trouvé.
Dans ce cas les variables non trouvées restent non définies.
L'attribut « value » vous permet d'indiquer la chaine de caractères que vous souhaitez découper.
<get format="$jour$/$mois$/$annee$" value="31/12/2011">$annee$ prend alors la valeur 2011, $mois$ 03 et $jour$ 31.<get format="$nom$@$compagnie" value="siteweb@infocosme">$nom$ prend la valeur siteweb et $companie$ a pour valeur infocosme.
Pour fragmenter une string en un nombre de fragments dépendants de l’apparition des caractères séparateurs utilisez l'attribut « token="liste_des_caractères" ».
Vous pouvez aussi utiliser l’attribut « option="null/notnull" » pour préciser si vous voulez compter ou non les chaines vides (quand deux éléments séparateurs sont l’un à coté de l’autre). La valeur "null" prend en compte les chaines vides et la valeur "notnull’ ne les compte pas. Si option n'est pas précisé, la valeur par défaut est null.
L'attribut « "name" » vous permet de placer les fragments, obtenus par la découpe, dans une variable. Le premier fragment est ainsi obtenu dans la variable : $nom1$, le deuxième dans $nom2$ et ainsi de suite. La variable $nom$ (et $nom.count$) contient le nombre de fragments.
<get value="2011/03/15 12:46" token="/ :">
Génère les variables suivantes :
$date$ => 5 (nombre de valeurs)
$date.count$ => 5 (nombre de valeurs)
$date1$ => 2011 (valeur du premier fragment)
$date2$ =>03 (valeur du second fragment)
…
$date5$ =>46 (valeur du cinquième fragment)
Permet de définir comme variables les valeurs définies dans la chaîne au format :
nom1="valeur1" [nom2="valeur2...]
Cette balise est utile notamment dans le cadre de lecture de fichiers XML (balises XPROC et XPATH), pour récupérer les attributs attachés à une balise XML.
Depuis la version 4.1.6, cette balise accepte un attribut name permettant de stocker les paires nom/valeur dans un tableau; ce qui permet de gérer mes champs sans connaître leur nom a priori.
<get tag="val1=12345 val2=56789">
2 variables seront définies : val1 => 12345 val2 => 56789
Exemple avec balise XPROC :
<xproc file="$pathSVG$"><!-- Récupération du paramétrage du SVG -->
<cond expr="$xproc.name$ = svg">
<get tag="$xproc.attributes$">
À partir de la version 4.021a-30, l'attribut regex permet de fournir une expression régulière (du type PCRE2) qui sera utilisée pour parser la valeur passée dans value.
L'attribut name permet de nommer les variables résultats (ce sont les pattern entre parenthèses de l'expression régulière), comme dans <get token="...">. La variable $name.count$ contiendra le nombre de patterns trouvés.
Les patterns de recherche peuvent également être nommés (voir exemple avec date ci-dessous), auquel cas, ces noms de variables seront également affectés.
La documentation complète de la norme PCRE2 est ici. Le site regex101 permet de tester facilement les expressions régulières (il est par défaut en PCRE2)
Jusqu'à la version 4.1.7, un seul match est réalisé, il n'y a pas d'équivalent de l'option /g.
À partir de la version 4.1.8 (4010800), l'attribut options="..." permet de de paramétrer le comportement de la balise.
Options possibles à séparer par des virgules (ce sont les mêmes lettres que sur le site regex101) :
Voir exemple ci-dessous.
Les principaux éléments de recherche dans les expressions régulières PCRE2 sont :
| . | any character | |
| \d | any decimal digit | |
| \D | any character that is not a decimal digit | |
| \s | any white space character | |
| \S | any character that is not a white space character | |
| \w | any "word" character | |
| \W | any "non-word" character | |
| \b | word boundary | |
| \B | not a word boundary | |
| \o{ddd..} | character with octal code ddd.. | |
| \xhh | character with hex code hh | |
| \x{hhh..} | character with hex code hhh. | |
| \N{U+hhh..} | character with Unicode hex code point hhh.. (Unicode mode only) |
|
| ... | D'autres possibilités existent |
À cela s'ajoutent des suffixes précisant le nombre d'occurrences :
| * | 0 à n éléments | |
| + | 1 à n éléments | |
| ? | 0 ou 1 éléments | |
| {n} | pour exactement n éléments | |
| {n,m} | au moins n, pas plus que m | |
| ... | Il y a des combinaisons de ces suffixes |
Ainsi que les classes de caractères :
| [...] | positive character class | |
| [^...] | negative character class | |
| [x-y] | range | |
| [[:xxx:]] | positive POSIX named set | |
| [[:^xxx:]] | negative POSIX named set | |
| POSIX named set | ||
| alnum | alphanumeric | |
| alpha | alphabetic | |
| ascii | Code between 0 and 127 | |
| blank | space or tab | |
| cntrl | control character | |
| digit | decimal digit | |
| graph | printing, excluding space | |
| lower | lower case letter | |
| printing, including space | ||
| punct | printing, excluding alphanumeric | |
| space | white space | |
| upper | upper case letter | |
| word | same as \w | |
| xdigit | hexadecimal digit |
Un résumé complet de ces éléments est disponible ici.
Contrôle d'un entier :
Donnera entier.count=1 et entier1=12, le reste de la valeur est ignoré.
Pour accepter les entiers négatifs, on peut utiliser (-?\d+).
Contrôler une adresse IP :
Donnera ipAdr.count=4 et ipAdr1=192, ipAdr2=168, ipAdr3=72, ipAdr4=13
Contrôler une date au format dd/mm/yyyy :
Donnera date.count=3 et date1=31, date2=12, date3=2025
Mais aussi jour=31, mois=12, annee=2025
Pour gérer correctement les chaînes UTF-8, il faut préfixer les expressions régulières avec (*UTF) et/ou (*UCP). Voir exemple, dans l'image ci-dessous :

<set name="string" value="aa=123 bb=456 cc=789">
<get value="$string$" regex="(?<var>\w)=(?<value>\d+)" name="search" options="g">
Avec l'expression : regex="(?<var>\w)=(?<value>\d+)" name="search" options="g", on aura 2 variables :
Ici search.count=6 et search.matchount=3
Avec search1='a', search2='123', search3='b', search4='456', search5='c', search6='789', ainsi que var=1 et value=123
Et var1=a, value1=123, var2=b, value2=456, var3=c, value3=789
Téléchargez rapidement la dernière version du XPX: Version 3.8-rc16 - 05/02/2019
Venez nous poser vos questions et voir les problèmes courants que vous pouvez rencontrer
Aidez-nous à faire vivre ce site en faisant un don