From d9a7d01f69c4408038bc5bde691a14c91beba93f Mon Sep 17 00:00:00 2001
From: "David A. Madore" <david+git@madore.org>
Date: Mon, 28 Nov 2016 14:14:29 +0100
Subject: More remarks about regexp syntax in the computer world.

---
 notes-inf105.tex | 39 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/notes-inf105.tex b/notes-inf105.tex
index 1aad5d4..6d60fe7 100644
--- a/notes-inf105.tex
+++ b/notes-inf105.tex
@@ -767,6 +767,12 @@ dans l'ordre ASCII/Unicode, ou bien des négations d'intervalles comme
 \texttt{[\char"5Ea-z]} qui désigne un caractère qui \emph{n'est pas}
 entre \texttt{a} et \texttt{z}).
 
+Toutes sortes d'autres racourcis ou commodités de notation peuvent
+exister, par exemple \texttt{\char"5C<} et \texttt{\char"5C>} pour
+désigner un début et une fin de mot (la définition précise de « mot »
+pouvant varier), ou encore \texttt{$r$\{$n_1$,$n_2$\}} qui cherche
+entre $n_1$ et $n_2$ répétitions de $r$.
+
 \thingy Une autre subtilité est que la plupart des moteurs
 d'expressions régulières en informatique vont, par défaut,
 \emph{rechercher un facteur} (appelé « sous-chaîne » en informatique)
@@ -786,10 +792,41 @@ façon générale, trouver si une chaîne vérifie une expression
 rationnelle $r$, revient à y chercher \texttt{\char"5E\relax
   $r$\char"24}).
 
+\thingy Comme les expressions régulières en informatique sont
+représentées par des chaînes de caractères qui appartiennent au même
+alphabet (ASCII ou Unicode) que les chaînes sur lesquelles on effectue
+la recherche, le problème se pose de distinguer les métacaractères
+(l'étoile de Kleene \texttt{*}, par exemple) des caractères eux-mêmes
+(comment rechercher les chaînes contenant le caractère \texttt{*} si
+\texttt{*} est utilisé par l'étoile de Kleene ?).  La solution est
+d'introduire un mécanisme d'\emph{échappement} : ainsi,
+\texttt{x\char"5C*} recherche un \texttt{x} suivi d'un
+astérisque \texttt{*}, tandis que \texttt{x*} recherche un nombre
+quelconque de répétitions de la lettre \texttt{x}.
+
 \thingy Il existe malheureusement de nombreuses différences, parfois
 très subtiles, entre moteurs, ne serait-ce que dans les notations : un
 moteur pourra par exemple noter \texttt{(?)} ce qu'un autre note
-\texttt{\char"5C(\char"5C?\char"5C)} et vice versa.
+\texttt{\char"5C(\char"5C?\char"5C)} et vice versa.  La seule solution
+est de consulter attentivement la documentation de chaque moteur
+d'expressions régulières pour connaître la syntaxe utilisée.
+
+Signalons tout de même qu'il existe deux principales familles de
+syntaxes d'expressions régulières en informatique : les expressions
+régulières « POSIX étendues », utilisée notamment par le programme
+Unix \texttt{egrep}, et les expressions régulières Perl, qui ont été
+réadaptées dans beaucoup de langages, notamment Java, JavaScript,
+Python et d'autres.
+
+\thingy Signalons comme complication supplémentaire que dans de
+nombreux langages, les expressions régulières sont saisies comme des
+chaînes de caractères plutôt que d'avoir une syntaxe spéciale, et ceci
+a pour effet d'introduire un niveau supplémentaire d'échappement : par
+exemple, en Java, pour rechercher si une chaîne de caractères $s$
+contient un astérisque, on utilisera
+\texttt{$s$.matches("\char"5C\char"5C*")} puisque l'expression
+régulière à utiliser est \texttt{\char"5C*} et que cette chaîne de
+caractères s'écrit \texttt{"\char"5C\char"5C*"} en Java.
 
 
 \section{Automates finis}
-- 
cgit v1.2.3