regexp
Recherche par expression reguliere.
📝Syntaxe
startIndex = regexp(str, expression)
[startIndex, endIndex] = regexp(str, expression)
out = regexp(str, expression, outkey)
[out1, ..., outN] = regexp(str, expression, outkey1, ..., outkeyN)
out = regexp(..., option)
📥Arguments d'entrée
Paramètre Description
str vecteur de caracteres, tableau de chaines ou cellule de vecteurs de caracteres.
expression expression reguliere.
outkey 'start', 'end', 'tokenExtents', 'match', 'tokens', 'names' ou 'split'.
option 'once', 'ignorecase', 'matchcase', 'emptymatch', 'dotexceptnewline', 'lineanchors' ou 'forceCellOutput'.
📤Arguments de sortie
Paramètre Description
out indices, correspondances, jetons, structures de jetons nommes ou texte decoupe.
📄Description

regexp recherche du texte avec des expressions regulieres compatibles PCRE.

Une expression reguliere decrit un motif plutot qu'une chaine litterale. Elle est utile lorsque le texte peut varier, par exemple pour reconnaitre des identifiants, des dates, des adresses email, des nombres, des balises ou plusieurs orthographes voisines.

La demarche habituelle consiste a reperer les parties caracteristiques du texte, a traduire chaque partie en syntaxe d'expression reguliere, puis a appeler regexp avec la cle de sortie adaptee.

Par defaut, regexp renvoie les indices de debut, bases sur 1, de toutes les correspondances sans recouvrement. La recherche reprend apres la fin de la correspondance precedente. L'option 'once' arrete la recherche apres la premiere correspondance.

Metacaracteres courants :

Motif Signification Exemple
. n'importe quel caractere 'a.c' reconnait 'abc' et 'axc'
[abc] un caractere parmi un ensemble '[ch]at' reconnait 'cat' ou 'hat'
[^abc] un caractere absent de l'ensemble '[^0-9]' reconnait un caractere qui n'est pas un chiffre
[a-z] un caractere dans une plage '[A-Z]+' reconnait des lettres majuscules
\w, \W caractere de mot ou caractere qui n'est pas de mot '\w+' reconnait des mots et des identifiants
\d, \D chiffre ou non-chiffre '\d{4}' reconnait quatre chiffres
\s, \S espace blanc ou caractere non blanc '\w+\s+\w+' reconnait deux mots separes par des espaces

Les quantificateurs indiquent combien de fois l'expression precedente peut apparaitre.

Motif Signification
expr* zero fois ou plus
expr+ une fois ou plus
expr? zero ou une fois
expr{m,n} au moins m fois et au plus n fois
expr{m,} au moins m fois
expr{n} exactement n fois

Les quantificateurs sont avides par defaut. Ajoutez ? apres un quantificateur pour une correspondance minimale, par exemple '.*?' . Ajoutez + apres un quantificateur pour une correspondance possessive, par exemple '.*+' .

Les groupes controlent les jetons et les alternatives.

Motif Signification
(expr) groupe et capture un jeton
(?:expr) groupe sans capturer de jeton
(?<nom>expr) capture un jeton nomme
(expr1|expr2) reconnait l'une des deux expressions
\1, \2, ... reconnait le meme texte qu'un jeton deja capture

Les ancres et assertions reconnaissent des positions plutot que des caracteres.

Motif Signification
^, $ debut et fin du texte, ou debut et fin de ligne avec 'lineanchors'
\<, \> debut et fin d'un mot
\b, \B frontiere de mot ou absence de frontiere de mot
(?=expr), (?!expr) anticipation positive ou negative
(?<=expr), (?<!expr) retour arriere positif ou negatif

Utilisez 'ignorecase' pour ignorer la casse, 'dotexceptnewline' pour que . ne reconnaisse pas les retours a la ligne, 'lineanchors' pour appliquer ^ et $ ligne par ligne, et 'forceCellOutput' pour forcer les resultats scalaires dans des cellules.

💡Exemples
Trouver les indices de debut et le texte reconnu.
regexp('bat cat coat', 'c[aeiou]+t')
regexp('She sells sea shells.', '[Ss]h.', 'match')
regexp('01/11/2000', '(?<month>\d+)/(?<day>\d+)/(?<year>\d+)', 'names')
Reconnaitre plusieurs unites de vitesse avec une seule expression.
txt = ['The train traveled at 250 kilometers per hour ', ...
       'and the car traveled at 120 km/h.'];
pattern = 'k(ilo)?m(eters)?(/|\sper\s)h(r|our)?';
regexp(txt, pattern, 'match')
Extraire des adresses email depuis une cellule de texte.
contacts = {'Harry  hparker@hmail.com'; ...
            'Janice jan_stephens@horizon.net'; ...
            'Jason  jason_blake@mymail.com'};
email = '[a-z_]+@[a-z]+\.(com|net)';
regexp(contacts, email, 'match')
Utiliser des jetons, des jetons nommes et le decoupage.
regexp('3.14', '(\d+)\.(\d+)', 'tokens', 'once')
regexp('color: blue', '(?<key>\w+):\s*(?<value>\w+)', 'names')
regexp('one, two; three', '[,;]\s*', 'split')
🔗Voir aussi
regexpiregexprepregexptranslate
🕔Historique des versions
Version Description
1.17.0 initial version
Modifier cette page sur GitHub