
Un tas de fonctions de caractères JMP sont apparues dans un post précédent : longueur, substr, contient, etc. Ils sont parfaits pour les choses simples, et vous pourrait faites des choses difficiles avec eux si vous le vouliez. Mais Regex pourrait être mieux.
Regex, abréviation de Expression régulière , est une fonction JSL puissante pour manipuler du texte.
result = regex( sourceText, searchPattern, replaceTemplate, options );
(Il y a deux autres fonctions dans JSL avec Regex dans leur nom ; pour l'instant, regardez simplement la "regex" vanille. C'est celui que vous voulez, surtout si vous l'utilisez dans une formule de colonne.)
Ceci est une introduction très incomplète aux expressions régulières (mais une description raisonnablement complète de la fonction regex de JMP). Vous pouvez trouver de nombreux tutoriels sur les expressions régulières sur le Web ; L'expression régulière de JMP rechercherModèles sont similaires aux expressions régulières de Perl.
La searchPattern est l'expression régulière et décrit le texte à rechercher. La remplacerModèle décrit comment le texte correspondant sera remplacé et peut utiliser des morceaux du texte correspondant dans le modèle. Les exemples suivants utilisent une chaîne littérale (entre guillemets) pour le premier argument, pour plus de clarté, mais une variable contenant le texte source aurait presque toujours plus de sens.
regex( "123 456 789", "[0-9]*")
"123"
Cet exemple a deux arguments, texte source et modèle de recherche . Le searchPattern utilise des crochets pour créer un ensemble de caractères. Le raccourci trait d'union spécifie une plage. Vous pouvez utiliser [a-zA-Z] pour créer un ensemble de tous les caractères ASCII majuscules et minuscules. L'astérisque (*) signifie "répéter le motif précédent zéro ou plusieurs fois". \d est un raccourci pour l'ensemble de tous les chiffres.
regex( "123 456 789", "\d*")
"123"
Un jeu de caractères comme [0123456789] peut être annulé en le commençant par un chapeau : [^0123456789] correspond à tout caractère qui n'est pas un chiffre. Certains des raccourcis comme \d peuvent être représentés sous la forme d'un jeu de caractères :
| \w |
[a-zA-Z0-9_] |
caractères de mot |
| \W |
[^a-zA-Z0-9_] |
pas des caractères de mot |
| \ré |
[0-9] |
chiffres |
| \RÉ |
[^0-9] |
pas des chiffres |
| \s |
[ \t\v\f] |
les espaces blancs incluent les onglets, les retours, les retours à la ligne, les onglets verticaux et les sauts de page |
| \S |
[^ \t\v\f] |
pas d'espace |
Tous les raccourcis ci-dessus correspondent à un seul caractère . Vous pouvez ajouter le astérisque
\s*
pour correspondre à une série de zéro ou plus caractères d'espacement. Ou, vous pouvez ajouter un plus
\D+
pour correspondre à une série de un ou plus caractères non numériques. Ou, vous pouvez ajouter un point d'interrogation
\w ?
correspondre zéro ou un caractères de mots.
L'astérisque, le plus et le point d'interrogation sont des opérateurs de répétition, et ils sont glouton . Greedy signifie qu'ils saisissent autant de texte que possible, puis reculent plus tard si nécessaire. Ils peuvent être rendus réticents en ajoutant un point d'interrogation. Généralement gourmand est le comportement que vous souhaitez, mais pas toujours.
Parenthèses, références arrière et remplacerModèle
Une grande partie de la puissance des regex provient de l'interaction entre le modèle de recherche et le remplacerModèle . L'interaction est créée par l'utilisation de références arrière, représentées par \0, \1, \2, ... La valeur par défaut de replaceTemplate est "\0". La référence arrière \0 est le texte entier qui a été mis en correspondance. Les parenthèses sont utilisées dans les expressions régulières pour regrouper des éléments d'un motif afin de former des motifs plus grands. Par exemple
regex( "cat dog catog cadog cat dog", "cat|dog", "***", GLOBALREPLACE)
"*** *** *** og ca *** *** ***"
regex( "cat dog catog cadog cat dog", "ca(t|d)og", "***", GLOBALREPLACE)
"chat chien *** *** chat chien"
La barre verticale sépare les alternatives et a une priorité très faible ; le deuxième exemple utilise des parenthèses pour regrouper les t ou d ensemble. La remplacerModèle est juste un texte constant, ***. Mais chaque parenthèse ouverte commence une nouvelle référence arrière, et les références arrière peuvent être utilisées dans le modèle :
regex( "cat dog catog cadog cat dog", "ca(t|d)og", " \1 ", GLOBALREPLACE)
"chat chien t d chat chien"
GLOBALREPLACE force la regex à rechercher et à remplacer toutes les correspondances ; le motif correspond à catog ou cadog. La référence arrière est soit t soit d, car c'est la partie du motif à l'intérieur des parenthèses. Le modèle ajoute des espaces autour de la valeur \1, et le modèle est ensuite remplacé par chaque catog ou cadog correspondant.
Plusieurs paires de parenthèses peuvent être utilisées, à la fois imbriquées et séquentielles. Comptez simplement les parenthèses ouvertes pour trouver le numéro de référence arrière.
Formule du tableau de données
Voici l'exemple de nom, prénom utilisant regex.
Column formula using regex() Formule de colonne utilisant regex()
Cet exemple utilise les ancres ^ et $ (soulignées en vert). ^ correspond au début de la chaîne et $ correspond à la fin de la chaîne. \w* correspond à zéro ou plusieurs caractères de mot.Cet exemple est peut-être trop simple ; il ne gérera pas les noms avec des caractères spéciaux ou des blancs. Vous pouvez le retravailler pour le séparer par des virgules en utilisant des références arrière : Regex(nom, "([^,]*)", "\1") et Regex(nom, "\s*([^,]*)$", "\1") peut-être."([^,]*)" signifie zéro ou plusieurs caractères qui ne sont pas des virgules et "\s*([^,]*)$" signifie ignorer zéro ou plusieurs espaces, conserver toutes les non-virgules et être à la fin. Dans le "([^,]*)" cas \1 et \0 sont les mêmes. Mais en "\s*([^,]*)$", \0 peut avoir des espaces de tête que \1 n'a pas parce que \s* est en dehors des parenthèses pour \1.
Il y a beaucoup plus dans les expressions régulières, bien décrites ailleurs sur le Web (recherche de regex). Et l'exemple d'Alice et Jerry dans l'index de script est également très bon, si vous vous demandez comment les références arrière peuvent être utilisées.
Ensuite : les fonctions de correspondance de modèles.
Mise à jour du 29 janvier 2017 : mise en forme réparée pour la nouvelle communauté.