Il s'agit de rechercher si une chaîne de caractère ressemble à un modèle (un peu comme LIKE, mais en plus puissant)
>>-REGEXP_xxxx--(--origine--,--'modèle recherché'---------------->
>--+----------+--+-----------+--)----------------------------->
'-,--début-' '-,--option-'
\w | tout caractère alpha ou numérique (pouvant constituer un mot) |
\W | tout sauf caractère alpha ou numérique |
\d | un chiffre |
\D | tout sauf un chiffre |
\s | caractère espace |
\S | tout sauf un espace |
[modèle] | tout caractère respectant le modèle |
(suite) | regroupement (voir exemple après les opérateurs logiques) |
. | tout caractère |
^ | début de ligne |
$ | fin de ligne |
\ | déspécialise le caractère suivant (\. pour chercher un point) |
\N | caractère Unicode du nom indiqué (voir unicode.org) |
\u | caractère Unicode de la valeur héxa indiquée (voir unicode.org) |
\U | tout sauf le caractère Unicode indiqué |
\p{propriété Unicode} (voir Unicode Categories ) |
\p{L} -> une lettre |
\P{propriété Unicode} |
\P{L} -> tout sauf une lettre |
Quelques exemples de modèles
[abc] | un a ou un b ou un c |
[^abc] | tout sauf a, b et c |
[C-M] | toute lettre comprise entre C et M |
[a-z] | une minuscule |
[A-Z] | une majuscule |
[0-9] | un chiffre |
[a-zA-Z0-9] | une minuscule ou une majuscule ou un chiffre |
[a-z][A-Z][0-9] | une minuscule puis une majuscule puis un chiffre |
Opérateurs logiques (extrait)
| | ou (a|b -> a ou b) |
* | 0 à n fois l'expression précédente |
+ | 1 à n fois l'expression précédente |
? | 0 ou 1 fois l'expression précédente |
{n} | n fois exactement l'expression précédente |
{n,} | n fois ou plus l'expression précédente |
{n,m} | entre n et m fois l'expression précédente |
*? | 0 fois ou plus, le moins de fois possible |
+? | 1 fois ou plus, le moins de fois possible |
?? | 0 ou 1 fois, 0 de préférence |
les parenthèses servent à regrouper des caractères ou des méta-caractères, particulièrement pour les opérateurs logiques
• abc|def signifie a,b,(c ou d), e, f
• (abc)|(def) signifie abc ou def
• abc+ est vrai pour abc, abcc, abccc, abccccccc
• (abc)+ est vrai pour abc, abcabc, abcabcabc, etc...
par exemple, cette expression
(\w+\.)+((org)|(com)|(gouv)|(fr))
permet de rechercher un suite de caractères alphanumériques \w+ , suivie d'un point \. , cette série étant présente éventuellement plusieurs fois (\w+\.)+
puis soit org, soit com, soit gouv, soit fr : (org)|(com)|(gouv)|(fr)
Pour découvrir pas à pas, je vous conseille Openclassroom (les exemples sont en PHP, mais c'est transposable)
c | case sensitif |
i | case insensitif |
x | espaces ignorés |
n | fin de ligne matérialisé par . |
m | multi-ligne |
pour cette dernière option, par défaut ^ indique le début de la zone d'origine et $ la fin, sauf option m ou ^ indique le début de chaque ligne et $ la fin de chaque ligne.
une fin de ligne étant matérialisée par le couple "CR+LF" ou un point (.) si option n
Toutes ces fonctions peuvent, bien sûr, être utilisées directement dans les programmes SQLRPG, SQLRPGLE (ou Cobol)