
                      ======================================================================
                      |  SYNTAXE des expressions RGULIRES PRCE, de NOTEPAD++ v6.0 et PLUS  |
                      |                                    |
                      |                                                                      |
                      |    Guy THEVENOT       -      21 Aot 2012      -       Version 1.0   |
                      |                                   |
                      |                                                                      |
                      |             guy038          -          guy.038@wanadoo.fr            |
                      |                                              |
                      ======================================================================


    ATTENTION :
    

        Pour une bonne LISIBILIT et une NAVIGATION agrable, dans le FICHIER 'RegExp_N++.txt', OUVERT dans NOTEPAD++
                                      
            se conformer aux INSTRUCTIONS suivantes :
                             


                - Choisir la police FIXE 'Courrier New', en STYLE 'Standard' et TAILLE '10'
                                                              

                - Ne PAS afficher les Ns de LIGNE ( " Prfrences... ", Onglet " Zones d'dition " )
                                                  

                - Rgler l'AFFICHAGE en mode NORMAL (100%), par le RACCOURCI clavier CTRL + `/` du PAV NUMRIQUE
                                                            

                - Ne PAS demander des RETOURS  la LIGNE ( Choix " Retour automatique  la ligne " NON COCH )
                                              



    TABLE des MATIRES :
    


          I) REMARQUES PRLIMINAIRES
             


         II) SYNTAXE des expressions RGULIRES PCRE en partie RECHERCHE :
             

                 1) CARACTRES :

                        A) Un caractre LITTRAL, NON MTA-caractre
                        B) Un MTA-caractre LITTRAL
                        C) Un caractre en NOTATION HEXADCIMALE ou OCTALE
                        D) Un caractre d'CHAPPEMENT
                        E) Un caractre d'CHAPPEMENT ASCII
                        F) Un caractre JOKER
                        G) Un caractre d'une CLASSE de CARACTRES
                        H) Un caractre en DEHORS d'une CLASSE de CARACTRES
                        I) Un caractre d'une LISTE de CARACTRES
                        J) Un caractre en DEHORS d'une LISTE de CARACTRES
                        K) Un caractre DOUBLE ( Collating element )
                        L) Un caractre avec un Nom SYMBOLIQUE POSIX
                        M) Un caractre de CLASSE QUIVALENTE
                        N) REMARQUE IMPORTANTE sur les CLASSES ou LISTES de forme NGATIVE
                        O) Exemple RCAPITULATIF

                 2) SQUENCES d'CHAPPEMENT

                 3) ALTERNATIONS

                 4) ASSERTIONS :

                        A) TOUT DBUT du fichier COURANT
                        B) TOUTE FIN du fichier COURANT
                        C) FIN de la DERNIRE LIGNE du fichier COURANT
                        D) TOUT DBUT de LIGNE
                        E) TOUTE FIN de LIGNE
                        F) FRONTIRE de MOT
                        G) FRONTIRE de NON MOT
                        H) DBUT de MOT
                        I) FIN de MOT
                        J) FIN de la PRCDENTE recherche

                 5) COMMENTAIRES

                 6) GROUPES et RFRENCES :

                        A) Groupes de CAPTURE NON NOMMS
                        B) Groupes de CAPTURE NOMMS

                        C) RFRENCES  un groupe de CAPTURE, NON NOMM :

                               a) Rfrence ARRIRE ABSOLUE
                               b) Rfrence ARRIRE RELATIVE
                               c) Rfrence de GROUPE ABSOLUE
                               d) Rfrence de GROUPE RELATIVE
                               e) RFRENCES (?0) ou (?R)

                        D) RFRENCES  un groupe de CAPTURE NOMM :

                               a) Rfrence ARRIRE
                               b) Rfrence de GROUPE

                        E) Groupes NON CAPTURANTS :

                               a) Groupe NON CAPTURANT
                               b) Groupe NON CAPTURANT d'ALTERNATIVES

                        F) ANNEXES sur les GROUPES

                        G) RFRENCES RCURSIVES

                 7) OPTIONS :

                        A) l'OPTION i  et  -i
                        B) l'OPTION m  et  -m
                        C) l'OPTION s  et  -s
                        D) l'OPTION x  et  -x

                        E) PARTICULARITS dans NOTEPAD++
                        F) DFINITION de l'OBJET <Bloc>

                        G) SYNTAXE des OPTIONS :

                               a) La FORME (?<Bloc>)
                               b) La FORME ((?<Bloc>)....)
                               c) Les FORMES (?:(?<Bloc>)....) ou la forme SIMPLIFIE  (?<Bloc>):....)

                 8) QUANTIFICATEURS :

                        A) La FORME {n}
                        B) La FORME {n,}
                        C) La FORME {n,m}
                        D) La FORME ?
                        E) La FORME *
                        F) La FORME +

                        G) TYPES des QUANTIFICATEURS :

                               a) NON POSSESSIF, de TYPE " Greedy "  ( " Fougueux " )
                               b) NON POSSESSIFS, de TYPE " Lazy "  ( " Paresseux " )
                               c) POSSESSIFS, de type " Greedy " IMPLICITE

                               d) EXEMPLES

                        H) Groupes ATOMIQUES
                        I) Groupes OPTIONNELS
                        J) DIFFRENCES entre QUANTIFICATEURS

                 9) LOOKAROUNDS :

                        A) La FORME (?= .....)
                        B) La FORME (?! .....)
                        C) La FORME (?<= .....)
                        D) La FORME (?<! .....)

                10) Blocs CONDITIONNELS

                11) PRIORITS des OPRATEURS

                12) MEILLEURE CONCORDANCE d'une expression RGULIRE

                13) Exemples SUPPLMENTAIRES

                14) IMPORTANCE de la FORME du texte SUJET analys et des DONNES dsires par l'UTILISATEUR

                15) NOTE concernant la RCURSIVIT



        III) SYNTAXE des expressions RGULIRES PCRE en partie REMPLACEMENT :
             

                 1) RAPPELS IMPORTANTS

                 2) CARACTRES :

                        A) Un caractre LITTRAL, NON MTA-caractre
                        B) Un MTA-caractre LITTRAL
                        C) Un caractre en NOTATION HEXADCIMALE ou OCTALE
                        D) Un caractre d'CHAPPEMENT
                        E) Un caractre d'CHAPPEMENT ASCII

                 3) RFRENCE aux GROUPES NOMMS, PRDFINIS de la RECHERCHE :

                        A) TOUTE la CHANE de RECHERCHE
                        B) La zone AVANT la CHANE de RECHERCHE
                        C) La zone APRS la CHANE de RECHERCHE
                        D) Le DERNIER groupe de CAPTURE, ACTUELLEMENT APPARI
                        E) Le GROUPE de CAPTURE de PLUS GRAND NUMRO

                 4) RFRENCE aux GROUPES de CAPTURE NON NOMMS de la RECHERCHE

                 5) RFRENCE aux GROUPES de CAPTURE NOMMS de la RECHERCHE

                 6) CRITURE du caractre LITTRAL $

                 7) GROUPEMENT LEXICAL

                 8) EXPRESSIONS CONDITIONNELLES

                 9) MODIFICATEURS de CASSE



         IV) SUPPRESSION ou AJOUT de LIGNES VIDES :
             

                 1) CAS du remplacement GLOBAL ( Bouton " Remplacer tout " )

                 2) CAS du remplacement PAS  PAS ( Bouton " Remplacer " )



          V) RECHERCHES et/ou REMPLACEMENTS STANDARD :
             

                 1) AJOUT d'une CHANE Ch en DBUT de CHAQUE ligne, VIDE ou NON VIDE, d'un FICHIER

                 2) AJOUT d'une CHANE Ch en DBUT de CHAQUE ligne, NON VIDE,         d'un FICHIER


                 3) AJOUT d'une CHANE Ch en FIN   de CHAQUE ligne, VIDE ou NON VIDE, d'un FICHIER

                 4) AJOUT d'une CHANE Ch en FIN   de CHAQUE ligne, NON VIDE,         d'un FICHIER


                 5) AJOUT d'une CHANE Ch dans TOUTES les lignes VIDES        d'un FICHIER


                 6) SUPPRESSION de 1  n CARACTRES en DBUT de CHAQUE ligne  d'un FICHIER

                 7) SUPPRESSION du PREMIER caractre         de CHAQUE ligne  d'un FICHIER


                 8) SUPPRESSION de 1  n CARACTRES en FIN   de CHAQUE ligne  d'un FICHIER

                 9) SUPPRESSION du DERNIER caractre         de CHAQUE ligne  d'un FICHIER


                10) SUPPRESSION de TOUTES les lignes VIDES       d'un FICHIER, WINDOWS ( LIGNES finissant par CR + LF )

                11) SUPPRESSION de TOUTES les lignes VIDES       d'un FICHIER, UNIX    ( LIGNES finissant par LF )

                12) SUPPRESSION de TOUTES les lignes VIDES       d'un FICHIER, MAC     ( LIGNES finissant par CR )


                13) SUPPRESSION de TOUTE ligne VIDE EXCDENTAIRE d'un FICHIER, WINDOWS ( LIGNES finissant par CR + LF )

                14) SUPPRESSION de TOUTE ligne VIDE EXCDENTAIRE d'un FICHIER, UNIX    ( LIGNES finissant par LF )

                15) SUPPRESSION de TOUTE ligne VIDE EXCDENTAIRE d'un FICHIER, MAC     ( LIGNES finissant par CR )


                16) SUPPRESSION de TOUT caractre 'FIN de LIGNE' d'un FICHIER, WINDOWS ( LIGNES finissant par CR + LF )

                17) SUPPRESSION de TOUT caractre 'FIN de LIGNE' d'un FICHIER, UNIX    ( LIGNES finissant par LF )

                18) SUPPRESSION de TOUT caractre 'FIN de LIGNE' d'un FICHIER, MAC     ( LIGNES finissant par CR )


                19) SUPPRESSION de TOUTES les lignes COMMENANT par l'expression RGULIRE Re

                20) SUPPRESSION de TOUTES les lignes FINISSANT  par l'expression RGULIRE Re

                21) SUPPRESSION de TOUTES les lignes COMPORTANT     l'expression RGULIRE Re


                22) SUPPRESSION de TOUTES les lignes, NON VIDES, NE comportant PAS l'expression RGULIRE Re

                23) SUPPRESSION de TOUTES les lignes             NE comportant PAS l'expression RGULIRE Re

                        A) SUPPRESSION des SEULES lignes VIDES

                        B) SUPPRESSION des lignes NON VIDES, NE comportant PAS l'expression RGULIRE Re


                24) SUPPRESSION de TOUTES les lignes d'EXACTEMENT n CARACTRES, NON 'FIN de LIGNE'

                25) SUPPRESSION de TOUTES les lignes d'au MOINS   n CARACTRES, NON 'FIN de LIGNE'

                26) SUPPRESSION de TOUTES les lignes d'au PLUS    n CARACTRES, NON 'FIN de LIGNE'


                27) SUPPRESSION de TOUT texte,  PARTIR de  la PREMIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER

                28) SUPPRESSION de TOUT texte,  PARTIR de  la DERNIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER

                29) SUPPRESSION de TOUT texte, JUSQU'      la PREMIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER

                30) SUPPRESSION de TOUT texte, JUSQU'      la DERNIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER

                31) SUPPRESSION de TOUT texte, de la 1RE  la DERNIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER


                32) SUPPRESSION de TOUT texte, ENTRE DEUX occurrences SUCCESSIVES de Re,  dans CHAQUE ligne d'un FICHIER


                33) SUPPRESSION de la Nme OCCURRENCE de Re dans CHAQUE ligne d'un FICHIER

                34) SUPPRESSION de la Nme OCCURRENCE de Re d'un FICHIER


                35) SUPPRESSION de TOUTE expression RGULIRE Re, entre les COLONNES n et m,  dans TOUTES les LIGNES

                36) SUPPRESSION de TOUTE expression RGULIRE Re, en COLONNE n,               dans TOUTES les LIGNES


                37) SUPPRESSION de TOUTE Re, SPARE de la FIN de LIGNE par n  m CARACTRES, dans TOUTES les LIGNES

                38) SUPPRESSION de TOUTE Re, SPARE de la FIN de LIGNE par n CARACTRES,     dans TOUTES les LIGNES


                39) SUPPRESSION de TOUT caractre, en COLONNE n,              dans TOUTES les lignes d'un FICHIER


                40) SUPPRESSION de TOUT texte, ENTRE les COLONNES n et m,     dans TOUTES les lignes d'un FICHIER

                41) SUPPRESSION de TOUT texte,  COMPTER de la COLONNE n,     dans TOUTES les lignes d'un FICHIER

                42) SUPPRESSION de TOUT texte, JUSQU' la COLONNE n,          dans TOUTES les lignes d'un FICHIER

                43) SUPPRESSION de TOUT texte, en DEHORS des COLONNES n  m,  dans TOUTES les lignes d'un FICHIER


                44) AJOUT d'une CHANE Ch,      TOUS les n CARACTRES,        dans TOUTES les lignes d'un FICHIER

                45) AJOUT d'une 'FIN de LIGNE', TOUS les n CARACTRES,        dans TOUTES les lignes d'un FICHIER


                46) EXTRACTION du SEUL texte, SATISFAISANT la RegExp Re, de   TOUTES les lignes d'un FICHIER

                47) RECHERCHE du PREMIER DLIMITEUR #,      APRS n COUPLES #.....# ( avec n >=0 ), dans CHAQUE ligne

                48) RECHERCHE du PREMIER DLIMITEUR # ou @, APRS n COUPLES #.....@ ( avec n >=0 ), dans CHAQUE ligne


                49) INTERVERSION de DEUX zones de TEXTE CONTIGUS dans TOUTES les lignes d'un FICHIER

                50) DPLACEMENT et/ou SUPPRESSION de ZONES de TEXTE, DTERMINES en COLONNES       ( Cas GNRAL )

                51) DPLACEMENT et/ou SUPPRESSION de ZONES de TEXTE, DTERMINES par un SPARATEUR ( Cas GNRAL )


                52) SUPPRESSION des MOTS IDENTIQUES, EXCDENTAIRES, de CHAQUE ligne d'un FICHIER


                53) SUPPRESSION des LIGNES IDENTIQUES, EXCDENTAIRES, d'un FICHIER


                54) REMPLACEMENT SIMULTAN de PLUSIEURS MOTS ou CARACTRES par d'AUTRES MOTS ou CARACTRES



         VI)  Exemple FINAL avec EXPLICATIONS DTAILLES
              


         VII) CONCLUSION
              


              ANNEXE
              



 I) REMARQUES PRLIMINAIRES :
    


        Ce prsent MANUEL vous est propos en TROIS versions :
                                        

            - une version PDF,   nomme RegExp_N++.pdf,  au titre de fichier ORIGINEL, auquel on pourra faire RFRENCE
                                                                             
            - une version HTML,  nomme RegExp_N++.html, au titre de fichier ORIGINEL, auquel on pourra faire RFRENCE
                                                                           
            - une version TEXTE, nomme RegExp_N++.txt,   laquelle vous pourrez AJOUTER vos PROPRES notes et RegExp !
                                                           


        L'INTGRALIT de ce TUTORIAL a t rdig en FRANAIS, ( ma langue MATERNELLE ! ), car il m'a sembl que la
                                                
            PRCISION et la CLART des INFORMATIONS tait le point PRIMORDIAL pour une bonne COMPRHENSION des
                                                   
            DIFFRENTS lments de la SYNTAXE des expressions RGULIRES PCRE
                                    

                => Les NOMS des FENTRES, et de leurs RUBRIQUES, sont ceux du FICHIER 'french.xml', par DFAUT
                                                                    

                REMARQUE :
                

                    On notera la PITRE traduction FRANAISE de la NOUVELLE case  COCHER " . matches newline ", qui
                                                         
                        est " . comprend nouvelle ligne " !!
                              

                            PERSONNELLEMENT, je prfre la FORMULATION  " . = TOUT caractre "
                                                           


            TOUTE personne, de langue MATERNELLE ANGLAISE, qui matrise CORRECTEMENT le FRANAIS, est donc cordialement
                                                     
                INVITE  EXTRAIRE, de ce MANUEL, une TRADUCTION ANGLAISE dcente !! ( I am much obliged to you ! )
                                                       



        Pour les utilisateurs PRESSS, ou ne dsirant PAS s'INVESTIR, dans un PREMIER temps, dans la COMPRHENSION de
                                                                         
        cette SYNTAXE, lire ce PREMIER chapitre, puis CONSULTER les TROIS DERNIERS chapitres, AVANT la CONCLUSION,
                                                         
            intituls :


                - SUPPRESSION et AJOUT de LIGNES VIDES
                  
                - RECHERCHES et/ou REMPLACEMENTS STANDARD
                  
                - Exemple FINAL avec EXPLICATIONS DTAILLES
                  



        Ce DESCRIPTIF de SYNTAXE n'est VALABLE QUE si les RECHERCHES et/ou REMPLACEMENTS se font DANS l'diteur
                                   
            NOTEPAD++, lui-mme,  COMPTER de la VERSION 6.0 et NON par un AUTRE logiciel ou par une VERSION de
                                         
            Notepad++ ANTRIEURE  la 6.0 !
                      

               REMARQUE :
               

                   Pour les RFRACTAIRES  la version UNICODE de NOTEPAD++, il est POSSIBLE d'utiliser le NOUVEAU
                                                                               
                       moteur de RECHERCHE-REMPLACEMENT et les expressions RGULIRES PRCE, avec la version 5.9.8 ANSI
                                                           
                       de NOTEPAD++ !!

                           => Il suffit de REMPLACER le fichier 'SciLexer.dll', de la version 5.9.8 ANSI, par le
                                                                         
                                  PLUS RCENT fichier 'SciLexer.dll' ( ACTUELLEMENT, celui de la version UNICODE 6.1.5 )
                                                                      


                   TOUTEFOIS, en cas d'ERREUR de SYNTAXE, dans les zones de RECHERCHE et/ou de REMPLACEMENT, le
                                                                     
                       MESSAGE ' Invalid regular expression ' n'apparat JAMAIS. SEULS, les PREMIERS caractres du
                                                       
                       fichier COURANT sont SLECTIONNS,  TORT !
                                                


                   Dans CERTAINS cas, la RECHERCHE peut aussi partir dans une BOUCLE INFINIE, ncessitant l'ARRT de
                                                                                      
                        NOTEPAD++, par le GESTIONNAIRE de TCHES, SANS SAUVEGARDE des fichiers de CONFIGURATION !!
                                                    

                            => Il sera donc PRFRABLE d'ENREGISTRER TOUS vos fichiers, AVANT de TENTER une opration
                                                           
                                   de RECHERCHE-REMPLACEMENT COMPLEXE, de votre cru !!
                                      



        Ce prsent MANUEL est le MLANGE, que j'espre RUSSI :
                           

            - de mes DIFFRENTS essais PERSONNELS avec NOTEPAD++ 6.0 et PLUS
                                                     

            - de mes connaissances ANTRIEURES sur les expressions RGULIRES du monde UNIX
                                                                  

            - de diverses DOCUMENTATIONS, trouves sur INTERNET ( liste NON EXHAUSTIVE ) :
                                         

                  http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex

                  http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions

                  http://mushclient.com/pcre/pcrepattern.html

                  http://www.regular-expressions.info/tutorial.html

                  http://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.71%29.aspx

                  http://en.wikipedia.org/wiki/Regular_expression

                  http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions

                  http://docs.python.org/library/re.html

                  http://www.regextester.com/pregsyntax.html

                  http://perldoc.perl.org/perlrequick.html

                  http://perldoc.perl.org/perlretut.html

                  http://perldoc.perl.org/perlreftut.html

                  http://perldoc.perl.org/perlunitut.html

                  http://www.lumadis.be/regex/tuto_pcre.php


                      en OMETTANT toutes les ERREURS de TYPOGRAPHIE qu'elles contiennent, ce qui est un COMBLE, quand
                                                                          
                          on sait que la SYNTAXE des expressions RGULIRES est TRS PRCISE et SENSIBLE  la CASSE !!!
                                                                    



        Dans la FENTRE " Rechercher " ( CTRL [ + SHIFT ] + F ou CTRL + H ) :
                                   

            - les OPTIONS " Respecter la casse " et " Boucler " sont supposes COCHES
                                                      
            - le MODE de RECHERCHE " Expression rgulire " est suppos COCH
                                                    

                pour la RUSSITE des exemples CI-APRS !
                        


        Dans la FENTRE " Find/Replace " ( CTRL + R ) :
                               

            - les OPTIONS " Match case " et " Wrap " sont supposes COCHES
                                                      
            - le MODE de RECHERCHE " Regular Expr " est suppos COCH
                                                    

                pour la RUSSITE des exemples CI-APRS !
                        


        La dnomination 'FIN de LIGNE' reprsente, au CHOIX :
                                          

            - les DEUX caractres  \r\n  ( \x0D\x0A ) pour un FICHIER de type WINDOWS
                                                              
            - le caractre UNIQUE  \n    ( \x0A )     pour un FICHIER de type UNIX
                                                                  
            - le caractre UNIQUE  \r    ( \x0D )     pour un FICHIER de type MAC
                                                                  

            - le caractre UNIQUE  \f    ( \x0C )     QUEL que SOIT le TYPE du fichier
                                              


            Dans les exemples, CI-APRS, on supposera oprer sur des FICHIERS de type WINDOWS, MME s'ils
                                                                                
                contiennent CERTAINES lignes termines par le SEUL caractre \n  ou  \r
                                              

                    => 'FIN de LIGNE' signifie la SEULE suite des DEUX caractres \r\n  ou  le SEUL caractre \f ( \x0c )
                                                                                   


        TRS IMPORTANT :
        

            Dans les ZONES de SAISIE des FENTRES " Rechercher "  et  " Find/Replace ", BIEN s'assurer de NE PAS
                                                                 
                placer des ESPACES EXCDENTAIRES, en TTE et/ou en QUEUE de la SAISIE, SAUF si ces caractres ESPACES
                                                            
                sont bien DSIRS
                          

                    Dans le cas CONTRAIRE, il est FORT probable que l'expression RGULIRE cherche NE sera PAS trouve !
                                                                     


            Dans les ZONES de SAISIE des FENTRES " Rechercher "  et  " Find/Replace ", BIEN s'assurer de la CASSE
                                                                    
                des LMENTS, constitutifs des expressions RGULIRES saisies :
                                     

                    En effet, les SYMBOLES  \r  et  \R  , par exemple, n'ont ABSOLUMENT PAS la mme SIGNIFICATION !!
                                                                          

                        et PAREILLEMENT pour  \a  et  \A  ,  \G1  et  \g1  ,  \L  et  \l  ,  \Ca  et  \cA  , .......
                                                                                     

                    SINON, il est FORT probable que l'expression RGULIRE cherche NE sera PAS trouve !
                                                         


        NOTES :
        

            La SYNTAXE des expressions RGULIRES de NOTEPAD++ correspond, GLOBALEMENT,  la BIBLIOTHQUE Open Source
                                                    
                PCRE ( PERL Compatible Regular Expressions ) de PERL Version 5.10
                                  


                EXCEPTIONS :
                

                    Certaines ENTITS spcifiques, ci-DESSOUS, sont INOPRANTES avec la version PCRE de NOTEPAD++ :
                                                                       

                        - Les CLASSES de caractres UNICODE,    telles que, par exemple   :  \p{Lu}, \pM, \P{IsCntrl}
                                                                                   
                        - Les formes d'VALUATION de code PERL, telles que, par exemple   :  (?{PRINT "Hello";})
                                                                      
                        - Les VERBES de CONTRLE,               tels que,   par exemple   :  (*FAIL), (*PRUNE:Name)
                                                                             
                        - Les DIRECTIVES ( PRAGMA )             telles que, par exemple   :  'eval', 'taint', 'debug'
                                                                                      



            PRCE et PERL ont une OPTIMISATION, permettant l'CHEC RAPIDE de la correspondance, lorsqu'un SEUL
                                                                     
                caractre LITTRAL est plac en FIN du gabarit de RECHERCHE.
                                        

                    EXEMPLE : Si le GABARIT de recherche a*@ est appliqu  la chane SUJET 'aaaa....aaaa', l'CHEC
                                                                                   
                                  survient IMMDIATEMENT car le DERNIER caractre 'a' de la chane SUJET est, 
                                                               
                                  l'vidence, bien DIFFRENT du symbole AROBASE '@', plac en FIN du GABARIT
                                                               



            Cette DESCRIPTION se dcompose en CINQ parties PRINCIPALES :
                                            


                - La SYNTAXE des expressions RGULIRES PCRE, dans la zone de SAISIE de RECHERCHE
                                                            
                - La SYNTAXE des expressions RGULIRES PCRE, dans la zone de SAISIE de REMPLACEMENT
                                                            
                - La SUPPRESSION ou l'AJOUT de lignes VIDES
                                      
                - Les RECHERCHES et/ou les REMPLACEMENTS STANDARD
                                 
                - Un exemple FINAL avec EXPLICATIONS DTAILLES
                           


        REMARQUE :
        

            Si vous n'apprciez PAS le SOULIGNEMENT SYSTMATIQUE, utilis dans ce MANUEL, il est POSSIBLE de le
                                                   
                SUPPRIMER, dans sa version TEXTE, par l'opration de RECHERCHE-REMPLACEMENT ci-dessous :
                                               

                    - Ouvrir la BOITE de dialogue " Remplacer " par le raccourci CTRL + H
                                                                        
                    - crire  ([ ]+)(et|ou)?(?1)(\R)  en zone de RECHERCHE     ( ESPACE aprs le CROCHET OUVRANT ! )
                                                  
                    - crire  ?2\1\2\3                 en zone de REMPLACEMENT  ( Bien COMMENCER par ?2 )
                                                              
                    - Ne PAS cocher la CASE " Respecter la Casse "
                                    
                    - COCHER la CASE " Boucler "
                                 
                    - Slectionner le bouton " Expression Rgulire "
                                               
                    - Cliquer sur le BOUTON " TOUT remplacer "  ( DURE du REMPLACEMENT : environ 5 SECONDES )
                                                                               

            Le RLE des diffrents LMENTS, des zones de RECHERCHE et de REMPLACEMENT, sera DCRIT par la SUITE
                                                                   

                PAS de PANIQUE !!!



 II) SYNTAXE des expressions RGULIRES PCRE en partie RECHERCHE :
     



 1) CARACTRES :
    

        TOUT caractre d'une expression RGULIRE, en partie RECHERCHE,  est appari  LUI-MME, SAUF :
                                                         

                        - le caractre POINT                   ( . )
                        - le caractre CROCHET    OUVRANT      ( [ )
                        - le caractre ACCOLADE   OUVRANTE     ( { )
                        - le caractre ACCOLADE   FERMANTE     ( } )
                        - le caractre PARENTHSE OUVRANTE     ( ( )
                        - le caractre PARENTHSE FERMANTE     ( ) )
                        - le caractre ANTISLASH               ( \ )
                        - le caractre ASTRISQUE              ( * )
                        - le caractre ADDITION                ( + )
                        - le caractre POINT d'INTERROGATION   ( ? )
                        - le caractre ACCENT CIRCONFLEXE      ( ^ )
                        - le caractre DOLLAR                  ( $ )
                        - le caractre BARRE VERTICALE         ( | )


            Ces 13 CARACTRES, appels MTA-caractres, ont une signification SPCIALE, explique par la SUITE
                                                


        Un caractre UNIQUE peut tre, au CHOIX :
                                    


        A) Un caractre LITTRAL, NON MTA-caractre :
           

               TOUT caractre, DIFFRENT des MTA-caractres indiqus CI-DESSUS, se reprsente LUI-MME
                                                     

                   EXEMPLE : l'expression RGULIRE 'A3@;z' recherche la chane IDENTIQUE 'A3@;z' !
                                                                    


               NOTE :
               
                   Si l'OPTION " Respecter la casse " n'est PAS COCHE, l'expression RGULIRE 'A3@;z' trouvera
                                                                    

                       UNE des HUIT chanes ci-dessous :
                       

                           A3@;Z  ,  A3@;Z  ,  A3@;z  ,  A3@;z  ,  a3@;Z  ,  a3@;Z  ,  a3@;z  ,  a3@;z
                                                              


               REMARQUES :
               

                   Bien que NON ncessaire, un caractre, NON MTA-caractre, peut, galement, tre PRCD du
                                                                    
                       caractre ANTISLASH ( \ )
                                 

                           EXEMPLE : la FORME  \@ ( ou  @ ) quivaut au caractre LITTRAL 'AROBASE' ( @ )
                                                                                     


                   Les formes '\ + LETTRE', ci-dessous, NE participent PAS  la SYNTAXE des expressions RGULIRES, dans
                                                                     
                       la partie RECHERCHE, et sont IDENTIQUES au caractre LETTRE, indiqu APRS le caractre ANTISLASH
                                                                                 

                           \i  ,  \j  ,  \m  ,  \o  ,  \q  ,  \y  ,  \F  ,  \I  ,  \J  ,  \M  ,  \O  ,  \T  et  \Y
                                                                                        

                               EXEMPLE :  La FORME  \y ( ou  y ) quivaut  la lettre MINUSCULE y
                                                                     



        B) Un MTA-caractre LITTRAL :
           

               Il est constitu du caractre ANTISLASH ( \ ), SUIVI d'un MTA-caractre et reprsente le
                                                 
                   MTA-caractre LITTRAL, SANS sa signification SPCIALE dans la syntaxe PCRE, en partie RECHERCHE
                                                                    

                       EXEMPLES :
                       

                           la FORME  \*  quivaut au caractre LITTRAL 'ASTRISQUE' ( * )
                                                                             
                           la FORME  \$  quivaut au caractre LITTRAL 'DOLLAR'     ( $ )
                                                                             
                           la FORME  \\  quivaut au caractre LITTRAL 'ANTISLASH'  ( \ )
                                                                             


               REMARQUE :
               

                   Un MTA-caractre LITTRAL peut aussi s'employer ENTRE CROCHETS ( Voir PLUS LOIN )
                                                     

                       Cependant, dans une LISTE entre CROCHETS, la PLUPART des MTA-caractres PERDENT leur
                                                            
                           signification SPCIALE
                                         

                       SEULS, TROIS d'entre eux devront, tout de mme, tre PRCDS d'un ANTISLASH (\)
                                                                

                               Ce sont :  l'ANTISLASH  \\  ,  le TIRET HAUT  \-  et le CROCHET FERMANT  \]
                                                            



        C) Un caractre en NOTATION HEXADCIMALE ou OCTALE :
           

               \x0    , \x00     = le caractre de code HEXA     =   00  ( caractre Ascii NUL )
               \x{00} , \x{0000} = le caractre de code HEXA     =   00  ( caractre Ascii NUL )
                                                                                     


               \xN               = le caractre de code HEXA     =   0N   avec N = [0-9A-Fa-f]
               \xNN              = le caractre de code HEXA     =   NN   avec N = [0-9A-Fa-f]
               \x{MN}            = le caractre de code HEXA     =   MN   avec N = [0-9A-Fa-f] et M = [0-7]
                                                                                                  
               \x{NNNN}          = le caractre de code UNICODE  = NNNN   avec N = [0-9A-Fa-f] si fichier COD en UTF-8
                                                                                                          
               \0   , \00        = le caractre de code OCTAL    =  000  ( caractre Ascii NUL )
               \000 , \0000      = le caractre de code OCTAL    =  000  ( caractre Ascii NUL )
                                                                                     
               \0N               = le caractre de code OCTAL    =  00N   avec N = [0-7]
               \0NN              = le caractre de code OCTAL    =  0NN   avec N = [0-7]
               \0MNN             = le caractre de code OCTAL    =  MNN   avec N = [0-7] et M = [0-3]
                                                                                            

               EXEMPLES et REMARQUES :
               

                   \011      reprsente le caractre de CONTRLE 'TAB' ( 11 OCTAL = 9 DCIMAL )
                   \0113     reprsente la lettre 'K' ( 113 OCTAL = 75 DCIMAL )
                   \011[3]   reprsente le caractre de CONTRLE 'TAB', suivi du CHIFFRE '3'

                   \01456    reprsente la CHANE 'e6' ( 145 OCTAL = 101 DCIMAL = 'e' )
                   \014[5]6  reprsente le caractre de CONTRLE 'FF' suivi de la chane '56'

                   \007      reprsente le caractre de CONTRLE 'BEL' ( Alert )
                   \008      reprsente le caractre de CONTRLE 'NUL', suivi du CHIFFRE 8 ( PAS de car. '8' en OCTAL ! )
                   \08            "      "      "     "    "       "      "    "     "                      
                   \010      reprsente le caractre de CONTRLE 'BS' ( 10 OCTAL = 8 DCIMAL )

                   \x00      reprsente le caractre de CONTRLE 'NUL'
                   \x000     reprsente le caractre de CONTRLE 'NUL', suivi du CHIFFRE '0'
                   \x{0}00   reprsente le caractre de CONTRLE 'NUL', suivi de 2 CHIFFRES '00'

                   \x{263A}  reprsente le caractre MO-ICNE :) ( Visage SOURIANT )  dans un fichier COD en UTF-8
                   \x{20ac}  reprsente le caractre MONTAIRE EURO (  )              dans un fichier COD en UTF-8


               NOTE :
               
                   Ces caractres, en NOTATION HEXA ou OCTALE, s'emploient aussi ENTRE CROCHETS ( Voir PLUS LOIN )
                                                                  



        D) Un caractre d'CHAPPEMENT :
           

               \r    =   \x0D  (CR)   =   Caractre CARRIAGE RETURN  ( Caractre SPARATEUR de LIGNE )
               \a    =   \x07  (BEL)  =   Caractre BELL             ( Caractre ALERTE )
               \t    =   \x09  (TAB)  =   Caractre TABULATION       ( Caractre BLANC HORIZONTAL )
               \e    =   \x1B  (ESC)  =   Caractre ESCAPE           ( Caractre CHAPPEMENT )
               \n    =   \x0A  (LF)   =   Caractre LINE FEED        ( Caractre SPARATEUR de LIGNE )
               [\b]  =   \x08  (BS)   =   Caractre BACKSPACE        ( Caractre RETOUR ARRIRE )
               \f    =   \x0C  (FF)   =   Caractre FORM FEED        ( Caractre SPARATEUR de LIGNE )


               NOTE :
               
                   Ces caractres d'CHAPPEMENT peuvent aussi s'employer ENTRE CROCHETS ( Voir PLUS LOIN )
                                                                      

               REMARQUE :
               
                   [\b] reprsente le caractre BASKSPACE = \x08 )
                                               
                   \b  est une ASSERTION, reprsentant une POSITION ( Voir PLUS LOIN )
                                                        

                       ( limite ENTRE un MOT et un NON MOT ou ENTRE un NON MOT et un MOT )
                                    


               EXEMPLE :
               

                   \t\t\t  cherche TROIS caractres TABULATION conscutifs
                                         


        E) Un caractre d'CHAPPEMENT ASCII :
           

               \c@   =   \c`   =   \x00  (  Caractre de CONTRLE  'NUL'   =   Caractre NULL              )

               \cA   =   \ca   =   \x01  (  Caractre de CONTRLE  'SOH'   =   START of HEADER             )
               \cB   =   \cb   =   \x02  (  Caractre de CONTRLE  'STX'   =   START of TEXT               )
               \cC   =   \cc   =   \x03  (  Caractre de CONTRLE  'ETX'   =   END   of TEXT               )
               \cD   =   \cd   =   \x04  (  Caractre de CONTRLE  'EOT'   =   END   of TRANSMISSION       )
               \cE   =   \ce   =   \x05  (  Caractre de CONTRLE  'ENQ'   =   ENQUIREMENT                 )
               \cF   =   \cf   =   \x06  (  Caractre de CONTRLE  'ACK'   =   ACKNOWLEDGEMENT             )
               \cG   =   \cg   =   \x07  (  Caractre de CONTRLE  'BEL'   =   BELL                        )
               \cH   =   \ch   =   \x08  (  Caractre de CONTRLE  'BS'    =   BACK SPACE                  )
               \cI   =   \ci   =   \x09  (  Caractre de CONTRLE  'TAB'   =   HORIZONTAL TABULATION       )
               \cJ   =   \cj   =   \x0A  (  Caractre de CONTRLE  'LF'    =   LINE FEED                   )
               \cK   =   \ck   =   \x0B  (  Caractre de CONTRLE  'VT'    =   VERTICAL   TABULATION       )
               \cL   =   \cl   =   \x0C  (  Caractre de CONTRLE  'FF'    =   FORM FEED                   )
               \cM   =   \cm   =   \x0D  (  Caractre de CONTRLE  'CR'    =   CARRIAGE RETURN             )
               \cN   =   \cn   =   \x0E  (  Caractre de CONTRLE  'SO'    =   SHIFT IN                    )
               \cO   =   \co   =   \x0F  (  Caractre de CONTRLE  'SI'    =   SHIFT OUT                   )
               \cP   =   \cp   =   \x10  (  Caractre de CONTRLE  'DLE'   =   DELETE                      )
               \cQ   =   \cq   =   \x11  (  Caractre de CONTRLE  'DC1'   =   DEVICE CONTROL 1            )
               \cR   =   \cr   =   \x12  (  Caractre de CONTRLE  'DC2'   =   DEVICE CONTROL 2            )
               \cS   =   \cs   =   \x13  (  Caractre de CONTRLE  'DC3'   =   DEVICE CONTROL 3            )
               \cT   =   \ct   =   \x14  (  Caractre de CONTRLE  'DC4'   =   DEVICE CONTROL 4            )
               \cU   =   \cu   =   \x15  (  Caractre de CONTRLE  'NAK'   =   NEGATIVE ACKNOWLEDGEMENT    )
               \cV   =   \cv   =   \x16  (  Caractre de CONTRLE  'SYN'   =   SYNCHRONISATION             )
               \cW   =   \cw   =   \x17  (  Caractre de CONTRLE  'ETB'   =   END TRANSMISSION BLOCK      )
               \cX   =   \cx   =   \x18  (  Caractre de CONTRLE  'CAN'   =   CANCEL                      )
               \cY   =   \cy   =   \x19  (  Caractre de CONTRLE  'EM'    =   END of MEDIUM               )
               \cZ   =   \cz   =   \x1A  (  Caractre de CONTRLE  'SUB'   =   SUBSTITUTION                )

               \c[   =   \c{   =   \x1B  (  Caractre de CONTRLE  'ESC'   =   ESCAPE                      )
               \c\   =   \c|   =   \x1C  (  Caractre de CONTRLE  'FS'    =   FILE   SEPARATOR            )
               \c]   =   \c}   =   \x1D  (  Caractre de CONTRLE  'GS'    =   GROUP  SEPARATOR            )
               \c^   =   \c~   =   \x1E  (  Caractre de CONTRLE  'RS'    =   RECORD SEPARATOR            )
               \c_             =   \x1F  (  Caractre de CONTRLE  'US'    =   UNIT   SEPARATOR            )


               NOTE :
               
                   Ces caractres d'CHAPPEMENT peuvent aussi s'employer ENTRE CROCHETS ( Voir PLUS LOIN )
                                                                      



        F) Un caractre JOKER :
           

               Le . ( POINT ) ou  \C  reprsente TOUT caractre, ANSI ou UNICODE, AUTRE que 'LF', 'CR' et 'FF',
                                                    
                   c'est  dire DIFFRENT du ou des caractres 'FIN de LIGNE'
                                                       

                       =>  \C  =  .  =  [^\r\n\f]
                           

                   EXEMPLE :
                   

                       abc..xyz reprsente une CHANE 'abc', SPARE d'une CHANE 'xyz', par DEUX caractres, AUTRES
                                                                                     
                          que  les TROIS caractres  \r , \n  et  \f
                                                         


                   BUG :
                   

                       (?s). avec la CASE " . comprend ligne nouvelle " COCHE ou NON ( Voir OPTIONS plus LOIN )
                                                            
                         .   avec la CASE " . comprend ligne nouvelle " COCHE
                                              

                           DEVRAIT trouver N'IMPORTE QUEL caractre, y COMPRIS \r, \n et \f, soit TOUS les caractres
                                                              
                               du fichier COURANT
                                          

                           MAIS, en fait, si l'on excute :
                           
                               - une RECHERCHE, PAS  PAS, avec le BOUTON " Suivant "
                                                                   
                               - un COMPTAGE, avec le BOUTON " Compter "
                                                       
                               - une SUPPRESSION avec la ZONE de REMPLACEMENT laisse VIDE
                                                               


                               SEULS, certains caractres sont pris en COMPTE ( et REMPLACS ) :
                                                                

                                   - TOUS les caractres, DIFFRENTS de \r et de \n, de TOUTES les lignes NON VIDES
                                                                                  

                                   - le CARACTRE  \r  ou  \n  ou la SUITE \r\n  de TOUTES les lignes VIDES, EXCEPT
                                                                        
                                         une ligne VIDE VENTUELLE, constituant la PREMIRE ligne du fichier
                                                                    

                                     De plus, si la ligne VIDE courante se TERMINE par le SEUL caractre \n ou \r, le
                                                                                     
                                         MOTEUR de RECHERCHE " SAUTE " la ligne VIDE suivante, VENTUELLE
                                                                     


                       PAR CONTRE, la RegExp (?s).+ trouve, EFFECTIVEMENT, TOUS les caractres du fichier COURANT  et,
                                                                         
                           si la ZONE de REMPLACEMENT est laisse VIDE, la SUPPRESSION, par le bouton " Remplacer tout ",
                                                                            
                           de TOUS les caractres du fichier, est EFFECTIVE
                                                              

                           SEULE, 1 ligne VIDE subsiste, si le fichier possdait 1 ou PLUSIEURS lignes VIDES au DBUT
                                                                    



               \X reprsente 1 SEUL caractre form de :
                           

                   a) un caractre, NON diacritique, UNIQUE
                                    
                   b) ZRO ou PLUS marques DIACRITIQUES d'association
                               

                   NOTES :
                   

                       Une marque DIACRITIQUE a une valeur UNICODE, HEXA, comprise, en gnral, entre 0300 et 036F
                                                                                    

                       \X trouve TOUT caractre UNIQUE, EXCEPT les marques DIACRITIQUES d'association ORPHELINES
                                                


                   EXEMPLE :
                   

                       L'expression RGULIRE \X* reprsente donc, en GNRAL, TOUT le CONTENU d'un fichier, MME si
                                                                                 

                            celui-ci est VIDE  => le rsultat est IDENTIQUE au raccourci clavier CTRL + A !
                                                                                    



               \R reprsente un SEUL caractre de type 'FIN de LIGNE', c'est  dire :
                              

                   - un caractre 'FIN de LIGNE' strict           :  \r\n ( CR+LF )  ou   \n ( LF )  ou   \r ( CR )
               ou                                                                       
                   - un caractre ASCII   de type 'FIN de LIGNE'  :  \x0B ( VT )     ou   \f ( FF )  ou   \x85 (  )
               ou                                                                  
                   - un caractre UNICODE de type 'FIN de LIGNE'  :  \x{2028}        ou   \x{2029}
                                                               

                         =>  \R  =  \r\n|[\n\v\f\r\x85\x{2028}\x{2029}]
                             


                   EXEMPLES :
                   

                       RegExp1\RRegExp2 cherche une expression RGULIRE RegExp1, SUIVIE d'une 'FIN de LIGNE', SUIVIE
                                                          
                           d'une expression RGULIRE RegExp2, en DBUT de la ligne SUIVANTE
                                                              


                       RegExp\R cherche l'expression RGULIRE RegExp en FIN de CHAQUE ligne du fichier COURANT,
                                                 


                           NOTE :
                           

                               Si un FICHIER ne contient QUE des PURS caractres 'FIN de LIGNE' ( \n, \r ou \r\n ),
                                                                                
                                   la FORME \R est PRFRABLE aux formulations  \r , \n  ou  \r\n, car elle reste
                                                                       
                                   VALABLE, QUEL que SOIT le TYPE du fichier ( WINDOWS, UNIX ou MAC ) et QUELLE que
                                                               
                                   SOIT la FIN de CHAQUE ligne rencontre
                                       


               REMARQUE :
               

                   Les caractres de type 'JOKER' ne sont SIGNIFICATIFS qu'en DEHORS des LISTES ou PLAGES de
                                                            
                       caractres ENTRE CROCHETS ( Voir PLUS LOIN )
                                          

                       EXEMPLE :
                       

                           [.\X\C\R] recherche le caractre POINT (.) ou l'UNE des LETTRES MAJUSCULES C, R ou X
                                                         


                   CONSQUENCE :
                   

                       Pour CHERCHER une expression RGULIRE RegExp1, SPARE d'une AUTRE expression RGULIRE RegExp2
                                                                  
                           par des caractres DIFFRENTS de \r , \n  et  \r\n, ou MME AUCUN ( autrement dit sur une
                                                   
                           MME ligne ), la FORMULATION RegExp1[^\R]*RegExp2 est INCORRECTE !
                                                    


                               => Utiliser, UNIQUEMENT, la FORME  RegExp1[^\r\n]*RegExp2, qui est EXACTE, QUEL que SOIT
                                                                    
                                      le TYPE de 'FIN de LIGNE'  et le TYPE du fichier COURANT ( WINDOWS, UNIX ou MAC )
                                                                                   


                       De mme, l'expression RGULIRE  abc[^\r\n]* cherche la 1ERE chane 'abc' de CHAQUE ligne,
                                                                         
                           SUIVIE de TOUS les caractres RESTANTS de CHACUNE d'elles
                                               

                               L'expression RGULIRE similaire  abc.*  n'a PAS tout  fait le MME effet :
                                                                       

                                   Soit la chane SUJET : 12345abcdefghijk67890
                                                          

                                       alors, la RECHERCHE  abc[^\r\n]*   trouve la CHANE 'abcdefghijk67890'
                                                                                 
                                       MAIS,  la RECHERCHE  abc.*  ne trouve QUE la CHANE 'abcdef', car, par DFAUT,
                                                                                            
                                           le caractre n'est PAS reconnu par le MTA-caractre .
                                                                               


               IMPORTANT :
               

                   Suite  un BUG de NOTEPAD++, la recherche de la SEULE SUITE de caractres CONSCUTIFS IDENTIQUES,
                                                                  
                       de type 'FIN de LIGNE', SANS caractre STANDARD plac(s) AVANT et/ou APRS cette SUITE, n'est
                                                    
                       PAS POSSIBLE, si l'on utilise l'UNE des expressions RGULIRES, ci-dessous, RPTE n FOIS :
                                                                          

                           -  \r\n\r\n\r\n....  pour un fichier de type WINDOWS
                                                        
                           -  \n\n\n....        pour un fichier de type UNIX
                                                              
                           -  \r\r\r....        pour un fichier de type MAC
                                                              
                           -  \R\R\R....        QUEL que SOIT le TYPE du fichier
                                      


                       En effet, le MOTEUR de RECHERCHE " SAUTE " TOUT caractre 'FIN de LIGNE' strict
                                                                
                           ( \r\n , \n  ou  \r )
                                      

                               - qui suit IMMDIATEMENT la PRCDENTE recherche IDENTIQUE  \R  , \n  , \r  ou  \r\n
                                                                         
                               - qui DBUTE le fichier COURANT
                                                 


                   Par CONTRE, l'utilisation du QUANTIFICATEUR + ( Voir PLUS LOIN ) permet, aux expressions RGULIRES,
                                                                               
                       ci-dessous, la recherche CORRECTE de la SEULE SUITE de caractres 'FIN de LIGNE' CONSCUTIFS et
                                                                         
                       IDENTIQUES, SANS caractre STANDARD plac(s) AVANT et/ou APRS cette SUITE
                                          


                           -  (\r\n)+  pour un fichier de type WINDOWS
                                                        
                           -  \n+      pour un fichier de type UNIX
                                                            
                           -  \r+      pour un fichier de type MAC
                                                            
                           -  \R+      QUEL que SOIT le TYPE du fichier
                                    


                   Il est aussi POSSIBLE d'utiliser le MODE de RECHERCHE " Mode tendu (\n, \r, \t, \0, \x...) "
                                                  
                       pour CHERCHER et/ou REMPLACER un PETIT nombre de caractres 'FIN de LIGNE' CONSCUTIFS,
                                                       
                       en crivant :


                           -  \r\n\r\n.....\r\n  pour un fichier de type WINDOWS
                                                        
                           -  \n\n..........\n   pour un fichier de type UNIX
                                                         
                           -  \r\r..........\r   pour un fichier de type MAC
                                                         

                           NOTE :
                           

                               Du fait des expressions RGULIRES AMLIORES,  compter de la VERSION 6.0 de NOTEPAD++,
                                                                         
                                   l'intrt du MODE de recherche TENDU est dsormais LIMIT !
                                                               

                               En effet,  part l'EXEMPLE ci-dessus, SEULES les DEUX syntaxes  \d...  et  \b........,
                                                                               
                                   SPCIFIQUES au mode 'TENDU' et SANS QUIVALENT en mode 'Expression RGULIRE',
                                                            
                                   peuvent, encore, s'avrer UTILES
                                                             



        G) Un caractre d'une CLASSE de CARACTRES :
           

               IMPORTANT :
               

                   Une CLASSE de caractres, POSIX ou NON, correspond TOUJOURS  un SEUL caractre
                                                  

                   Elle possde PLUSIEURS syntaxes :  -  [[:<NOM de CLASSE:]]  ou  [[:<NOM de CLASSE  1 Car.>:]]
                                                      
                                                      -  \p{<NOM de CLASSE}    ou  \p{<NOM de CLASSE  1 Car.>}
                                                                 
                                                      -  \p<NOM de CLASSE  1 Car.>
                                                         
                                                      -  \<NOM de CLASSE  1 Car. MINUSCULE>
                                                         

  ===============================================================================================================
  | DANS Classe [..]  | HORS Classe de Car. [..]  |    |            CONTENU de la CLASSE de caractres            |   |
  =============================================================================================================
  | [:space:] | [:s:] | \p{space}   | \p{s} | \ps | \s | [\t\n\x0B\f\r\x20\xA0]                                   | A |
  --------------------------------------------------------------------------------------------------------------
  | [:digit:] | [:d:] | \p{digit}   | \p{d} | \pd | \d | [0-9]                                                 | B |
  --------------------------------------------------------------------------------------------------------------
  | [:lower:] | [:l:] | \p{lower}   | \p{l} | \pl | \l | [a-z]             | C |
  --------------------------------------------------------------------------------------------------------------
  | [:upper:] | [:u:] | \p{upper}   | \p{u} | \pu | \u | [A-Z]                  | D |
  --------------------------------------------------------------------------------------------------------------
  | [:word:]  | [:w:] | \p{word}    | \p{w} | \pw | \w | [_\d\l\u]                                                | E |
  --------------------------------------------------------------------------------------------------------------
  | [:blank:] | [:h:] | \p{blank}   | \p{h} | \ph | \h | [\t\x20\xA0]                                             | F |
  --------------------------------------------------------------------------------------------------------------
  |      [:v:]        |  \p{v}      | \p{v} | \pv | \v | [\n\x0B\f\r]   ( Voir  EXCEPTION, ci-aprs )            | G |
  --------------------------------------------------------------------------------------------------------------
  |    [:alnum:]      | \p{alnum}   |       |     |    | [\d\l\u]                                                 | H |
  --------------------------------------------------------------------------------------------------------------
  |    [:alpha:]      | \p{alpha}   |       |     |    | [\l\u]                                                   | I |
  --------------------------------------------------------------------------------------------------------------
  |    [:cntrl:]      | \p{cntrl}   |       |     |    | [\x00-\x1F\x7F\x81\x8D\x8F\x90\x9D]                      | J |
  --------------------------------------------------------------------------------------------------------------
  |    [:graph:]      | \p{graph}   |       |     |    | [^\x00-\x20\x7F-\x81\x8D\x8F\x90\x9D\xA0]             | K |
  --------------------------------------------------------------------------------------------------------------
  |    [:print:]      | \p{print}   |       |     |    | [\s[:graph:]]                                            | L |
  --------------------------------------------------------------------------------------------------------------
  |    [:punct:]      | \p{punct}   |       |     |    | []\x21-\x2F:;<=>?@\\^_`{|}~\xA1-\xBF[]  | M |
  --------------------------------------------------------------------------------------------------------------
  |    [:xdigit:]     | \p{xdigit}  |       |     |    | [0-9A-Fa-f]                                              | N |
  --------------------------------------------------------------------------------------------------------------
  |    [:unicode:]    | \p{unicode} }       |     |    | [\x{0101}-\x{FFFF}]                                      | O |
  =============================================================================================================

    Ligne A  =  1 Caractre BLANC, SPARATEUR de ligne ou NON
    Ligne B  =  1 Caractre CHIFFRE, y compris EXPOSANT
    Ligne C  =  1 Caractre ALPHABTIQUE MINUSCULE, ACCENTU ou NON
    Ligne D  =  1 Caractre ALPHABTIQUE MAJUSCULE, ACCENTU ou NON
    Ligne E  =  1 Caractre de MOT                                       = Ligne B,C ou D ou TIRET BAS
    Ligne F  =  1 Caractre BLANC HORIZONTAL, NON SPARATEUR de ligne
    Ligne G  =  1 Caractre BLANC VERTICAL,       SPARATEUR de ligne    ( Voir  EXCEPTION, ci-aprs )
    Ligne H  =  1 Caractre ALPHANUMRIQUE, ACCENTU ou NON              = Ligne B,C ou D
    Ligne I  =  1 Caractre ALPHABTIQUE,   ACCENTU ou NON              = Ligne C ou D
    Ligne J  =  1 Caractre de CONTRLE ou caractre NON VISUALISABLE
    Ligne K  =  1 Caractre VISIBLE ( SAUF les 4 caractres     )
    Ligne L  =  1 Caractre AFFICHABLE ( Caractre VISIBLE ou BLANC )    = Ligne A ou K
    Ligne M  =  1 Caractre de PONCTUATION, 1 SYMBOLE, 1 ACCENT, 1 signe ou valeur MATHMATIQUE, 1 symbole MONTAIRE
    Ligne N  =  1 Caractre HEXADCIMAL
    Ligne O  =  1 Caractre UNICODE de code > 256 ( \x{0100} ) Bug : Le caractre \x100 n'est PAS considr UNICODE !
                                                                                               

               IMPORTANT :
               

                   Les CLASSES de type POSIX [:....:] sont utilises UNIQUEMENT dans une expression entre CROCHETS
                                                       

                       EXEMPLE :
                       

                          [AB[:digit:]x-z] reprsente le caractre UNIQUE A, B, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, x, y ou z
                                                   


                   Les 6 CLASSES de caractres \s, \d, \l, \u, \w, et \h peuvent s'employer, INDIFFREMMENT,
                                                        
                       DANS une expression entre CROCHETS ou en DEHORS de celle-ci
                                              


                       EXCEPTION :
                       

                           \v  reprsente un BLANC VERTICAL = [\n\x0B\f\r]
                                              
                           MAIS [\v] reprsente le SEUL caractre \x0B ( VERTICAL_TABULATION )
                                                             


                   Les CLASSES dbutant par \p sont utilises UNIQUEMENT en DEHORS d'une expression entre CROCHETS
                                                                 


               NOTES :
               

                   Les NOMS de CLASSE, dans les formes [:....:], \p{....} et \p., peuvent, INDIFFREMMENT, s'crire
                                                           
                       en lettres MAJUSCULES ou en MINUSCULES
                                  

                           EXEMPLE :  [[:diGIt:]]  ou  \p{DigiT}  ou  \p{D}  ou  \pD
                           



        H) Un caractre en DEHORS d'une CLASSE de CARACTRES :
           

               IMPORTANT :
               

                   Une CLASSE de caractres, POSIX ou NON, correspond TOUJOURS  un SEUL caractre
                                                  

                   Elle possde PLUSIEURS syntaxes :  -  [^[:<NOM de CLASSE:]]  ou  [^[:<NOM de CLASSE  1 Car.>:]]
                                                      
                                                      -  \P{<NOM de CLASSE}     ou  \P{<NOM de CLASSE  1 Car.>}
                                                                  
                                                      -  \P<NOM de CLASSE  1 Car.>
                                                         
                                                      -  \<NOM de CLASSE  1 Car. MAJUSCULE>
                                                         

  ===============================================================================================================
  | DANS Classe [^..] | HORS Classe de Car. [^..] |    |            CONTENU de la CLASSE de caractres            |   |
  =============================================================================================================
  | [:space:] | [:s:] | \P{space}   | \P{s} | \Ps | \S | [^\t\n\x0B\f\r\x20\xa0]                                  | P |
  -------------------------------------------------------------------------------------------------------------
  | [:digit:] | [:d:] | \P{digit}   | \P{d} | \Pd | \D | [^0-9]                                                | Q |
  -------------------------------------------------------------------------------------------------------------
  | [:lower:] | [:l:] | \P{lower}   | \P{l} | \Pl | \L | [^a-z]            | R |
  -------------------------------------------------------------------------------------------------------------
  | [:upper:] | [:u:] | \P{upper}   | \P{u} | \Pu | \U | [^A-Z]                 | S |
  -------------------------------------------------------------------------------------------------------------
  | [:word:]  | [:w:] | \P{word}    | \P{w} | \Pw | \W | [^_\d\l\u]                                               | T |
  -------------------------------------------------------------------------------------------------------------
  | [:blank:] | [:h:] | \P{blank}   | \P{h} | \Ph | \H | [^\t\x20\xA0]                                            | U |
  -------------------------------------------------------------------------------------------------------------
  |      [:v:]        | \P{v}       | \P{v} | \Pv | \V | [^\n\x0B\f\r]                                            | V |
  -------------------------------------------------------------------------------------------------------------
  |    [:alnum:]      | \P{alnum}   |       |     |    | [^\d\l\u] = [\D\L\U]                                     | W |
  -------------------------------------------------------------------------------------------------------------
  |    [:alpha:]      | \P{alpha}   |       |     |    | [^\l\u]   = [\L\U]                                       | X |
  -------------------------------------------------------------------------------------------------------------
  |    [:cntrl:]      | \P{cntrl}   |       |     |    | [^\x00-\x1F\x7F\x81\x8D\x8F\x90\x9D]                     | Y |
  -------------------------------------------------------------------------------------------------------------
  |    [:graph:]      | \P{graph}   |       |     |    | [\x00-\x20\x7F-\x81\x8D\x8F\x90\x9D\xA0]              | Z |
  -------------------------------------------------------------------------------------------------------------
  |    [:print:]      | \P{print}   |       |     |    | [\x00-\x08\x0E-\x1f\x7F-\x81\x8D\x8F\x90\x9D]         |  |
  -------------------------------------------------------------------------------------------------------------
  |    [:punct:]      | \P{punct}   |       |     |    | [^]\x21-\x2F:;<=>?@\\^_`{|}~\xA1-\xBF[] | $ |
  -------------------------------------------------------------------------------------------------------------
       [:xdigit:]     | \P{xdigit}  |       |     |    | [^0-9A-Fa-f]                                             |  |
  -------------------------------------------------------------------------------------------------------------
  |    [:unicode:]    | \P{unicode} }       |     |    | [^\x{0101}-\x{FFFF}]                                     |  |
  =============================================================================================================

    Ligne P  =  1 Caractre NON BLANC                     = TOUT, SAUF \t, \n, \x0B, \f, \r, \x20 et \xA0
    Ligne Q  =  1 Caractre NON CHIFFRE, dont EXPOSANT    = TOUT, SAUF un CHIFFRE de 0  9 et un EXPOSANT (  )
    Ligne R  =  1 Caractre NON ALPHABTIQUE MINUSCULE, ACCENTU ou NON
    Ligne S  =  1 Caractre NON ALPHABTIQUE MAJUSCULE, ACCENTU ou NON
    Ligne T  =  1 Caractre NON caractre de MOT          = TOUT, SAUF CHIFFRE, EXPOSANT, car. ALPHABTIQUE et TIRET BAS
    Ligne U  =  1 Caractre NON BLANC HORIZONTAL          = TOUT, SAUF \t, \x20 et \xA0
    Ligne V  =  1 Caractre NON BLANC VERTICAL,           = TOUT, SAUF \n, \x0B, \f et \r
    Ligne W  =  1 Caractre NON ALPHANUMRIQUE,           = TOUT, SAUF CHIFFRE, EXPOSANT et caractre ALPHABTIQUE
    Ligne X  =  1 Caractre NON ALPHABTIQUE,             = TOUT, SAUF caractre ALPHABTIQUE, ACCENTU ou NON
    Ligne Y  =  1 Caractre NON de CONTRLE, VISUALISABLE = TOUT, SAUF caractre de CONTRLE ou car. NON VISUALISABLE
    Ligne Z  =  1 Caractre NON VISIBLE                   = caractre de CONTRLE ou NON AFFICHABLE, BLANC, et    
    Ligne   =  1 Caractre NON AFFICHABLE                = caractre de CONTRLE ou NON AFFICHABLE + les 4 car.    
    Ligne $  =  1 Caractre NON de PONCTUATION, ni SYMBOLE, ni ACCENT, ni signe MATHMATIQUE, ni symbole MONTAIRE
    Ligne   =  1 Caractre NON HEXADCIMAL               = TOUT, SAUF CHIFFRES, LETTRES de A  F et LETTRES de a  f
    Ligne   =  1 Caractre, SANS quivalent UNICODE, de code < 256 ou le caractre \x100 ( Bug )
                                                                                            

               IMPORTANT :
               

                   La forme NGATIVE d'une classe de type POSIX [:....:], employe SEULE, peut tre, INDIFFREMMENT,
                                                                    
                       crite  sous la FORME  [^[:.....:]]  ou sous la FORME  [[:^.....:]]
                                                                  

                       EXEMPLE : [^[:word:]]   =   [[:^word:]   =   [^[:w:]]   =   [[:^w:]]   =   \W   =   [^_\d\l\u]
                       


                   Les classes de type POSIX [:....:] sont utilises UNIQUEMENT dans une expression entre CROCHETS
                                                       

                       EXEMPLE : [^AB[:digit:]x-z] reprsente un caractre AUTRE que :
                                                   

                                     A, B, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, x, y et z



                   Les 7 CLASSES de caractres \S, \D, \L, \U, \W, \H et \V peuvent s'employer, INDIFFREMMENT,
                                                           
                       DANS une expression entre CROCHETS ou en DEHORS de celle-ci
                                              


                   Les CLASSES dbutant par \P sont utilises UNIQUEMENT en DEHORS d'une expression entre CROCHETS
                                                                 


               NOTES :
               

                   Les NOMS de CLASSE, dans les formes [:....:], \P{....} et \P., peuvent, INDIFFREMMENT, s'crire
                                                           
                       en lettres MAJUSCULES ou en MINUSCULES
                                  

                           EXEMPLE :  [[:diGIt:]]  ou  \P{DigiT}  ou  \P{D}  ou  \PD
                           



        I) Un caractre d'une LISTE de CARACTRES :
           

               [<Liste>]       = UN des caractres de <Liste>, si elle NE contient PAS un des 4 caractres  ^ \ - ou ]
                                                                                    
               [<Car1>-<Car2>] = UN des caractres de l'TENDUE entre les caractres <Car1> et <Car2> INCLUS
                                                                            

                   IMPORTANT :  Le code ASCII de Car2 doit tre SUPRIEUR ou GAL au code ASCII de Car1
                       


                   NOTES :
                   

                       Entre DEUX CROCHETS, on peut combiner les DEUX formes ci-dessus :
                                                    

                           [123A-C_|x-z] reprsente UN des 11 CARACTRES  1, 2, 3, A, B, C, _, |, x, y ou z


                       La forme [X-b] ou [XYZ\[\\]\^_`ab] cherche UN des 11 CARACTRES  X, Y, Z, [, \, ], ^, _, `, a, b


                       Mais, si l'OPTION (?i) est place AVANT [W-c] ou si la CASE " Respecter la casse " est DCOCHE,
                                                                            
                           l'expression devient INCORRECTE car elle autorise le CAS [w-C] qui gnre une ERREUR
                                                                                            


                   REMARQUES :
                   

                       Les expressions [\d-z] et [0-9-z] sont INCORRECTES, MAIS [a-\d] quivaut bien  [a-d]
                                                                         

                       [abc] recherche UNE des 3 lettres MINUSCULES a, b ou c  MAIS  \[abc] recherche la CHANE '[abc]'
                                                                         


               Le SYMBOLE ']' de FIN de classe de caractre peut s'crire LITTRALEMENT si :
                                                             

                   - au TOUT DBUT de <Expression>
                        
                   - indiqu sous la forme \]
                                           

                   EXEMPLES :
                   

                       [X-]b]  reprsente 3 CARACTRES : la lettre 'X' ou le symbole MOINS '-', SUIVI de la CHANE 'B]'
                                                                                                        
                       [X-\]b] reprsente UN des  7 CARACTRES  X, Y, Z, [, \, ] ou b
                       
                       []X-b]  reprsente UN des 11 CARACTRES  X, Y, Z, [, \, ], ^, _, `, a ou b
                       


               Le SYMBOLE '-' d'TENDUE de caractres peut s'crire LITTRALEMENT si :
                                                   

                   - au TOUT DBUT ou en TOUTE FIN de <Expression>
                               
                   - indiqu sous la forme \-
                                           

                   EXEMPLES :
                   

                       [X-b]  reprsente UN des 11 CARACTRES  X, Y, Z, [, \, ], ^, _, `, a, ou b
                       
                       [X\-b] ou [-Xb] ou [Xb-] reprsente UN des 3 CARACTRES  -, X, ou b
                               


               Le SYMBOLE '\' d'CHAPPEMENT de caractre peut s'crire LITTRALEMENT, si indiqu sous la forme \\
                                                                                        

                   EXEMPLES :
                   

                       [X-c]   reprsente UN des 12 CARACTRES  X, Y, Z, [, \, ], ^, _, `, a, b ou c
                       
                       [X-\c]  est une expression INCORRECTE
                       
                       [X-\\c] reprsente UN des 6 CARACTRES  X, Y, Z, [, \ ou c
                       



        J) Un caractre en DEHORS d'une LISTE de CARACTRES :
           

               [^<Liste>]       = Un SEUL caractre, DIFFRENT de TOUS les caractres de <Liste>
                                                                    

               [^<Car1>-<Car2>] = UN SEUL caractre, en DEHORS de l'TENDUE des caractres <Car1>  <Car2> INCLUS
                                                                      


                   EXEMPLE :
                   

                       [^A-D12] trouve TOUT caractre DIFFRENT de A,B,C,D,1 et 2, dont 'FIN de LIGNE' ( \r, \n ou \f) !
                                                                               


               Le SYMBOLE '^' de NGATION de CLASSE de caractres peut s'crire LITTRALEMENT si :
                                                         

                   - PAS en PREMIER caractre de la LISTE entre CROCHETS
                                             
                   - indiqu sous la forme \^
                                           

                   EXEMPLES :
                   

                       [^Z-a] reprsente TOUS les CARACTRES, AUTRES que Z, [, \, ], ^, _, ` et la lettre MINUSCULE a
                       
                       [Z^-a] reprsente UN des 5 CARACTRES  Z, ^, _, `          ou  la lettre MINUSCULE a
                       
                       [Z-^a] reprsente UN des 6 CARACTRES  Z, [, \, ], ^       ou  la lettre MINUSCULE a
                       
                       [Z-a^] reprsente UN des 8 CARACTRES  Z, [, \, ], ^, _, ` ou  la lettre MINUSCULE a
                       


               IMPORTANT : Pour RESTREINDRE l'TENDUE de caractres de la FORME \w, on peut aussi employer la
                                            
                               la SYNTAXE :  [^\W<Caractres  EXCLURE>]
                                      

                               EXEMPLES :
                               

                                   [^\W_a-z]  quivaut   [0-9A-Z]
                                   
                                   [^\W_]     quivaut   [0-9A-Za-z]
                                   



        K) Un caractre DOUBLE ( Collating element ) :
           

               Il forme une SEULE UNIT forme de DEUX caractres
                                       

                   EXEMPLES :
                   

                       La FORME [[.ae.]] reprsente la chane des DEUX caractres 'ae'
                                                    

                       La FORME [[.ch.]-g] reprsente UN des 5 CARACTRES 'ch', d, e, f ou g
                                                                


               IMPORTANT : Le moteur PRCE, de NOTEPAD++, reconnat 7 caractres DOUBLES, dans 3 DIFFRENTES casses :
                                                        

                           [[.AE.]]   ,   [[.Ae.]]   ,   [[.ae.]]
                           [[.CH.]]   ,   [[.Ch.]]   ,   [[.ch.]]     ( Caractre Espagnol )
                           [[.DZ.]]   ,   [[.Dz.]]   ,   [[.dz.]]
                           [[.LJ.]]   ,   [[.Lj.]]   ,   [[.lj.]]
                           [[.LL.]]   ,   [[.Ll.]]   ,   [[.ll.]]     ( Caractre Espagnol )
                           [[.NJ.]]   ,   [[.Nj.]]   ,   [[.nj.]]
                           [[.SS.]]   ,   [[.Ss.]]   ,   [[.ss.]]     ( Caractre Allemand )


               REMARQUE : La POSITION des caractres DOUBLES, dans l'ordre ALPHABTIQUE, se situe, SELON les exemples,
                                                                           
                              AVANT ou APRS leur lettre RACINE, MAJUSCULE ou MINUSCULE ?
                                             


               EXEMPLES :
               

                   [[.dz.]-[.ll.]] reprsente UN des CARACTRES dz, e, f, g, h, i, j, k, l ou ll
                   
                   [[.dz.]-[.lj.]] reprsente UN des CARACTRES dz, e, f, g, h, i, j, k, l ou lj
                   
                   [[.dz.]-e]      reprsente UN des CARACTRES dz ou e ( IDENTIQUE  [[.dz.]e] )
                   
                   [[.dz.]-d]      est une expression INCORRECTE
                   
                   [[.dz.]d]       reprsente UN des CARACTRES d ou dz
                   
                   [d[.dz.]]       reprsente le CARACTRE d UNIQUEMENT ( !! )
                   



        L) Un caractre avec un Nom SYMBOLIQUE POSIX :
           

               DEUX syntaxes sont possibles :  [[.<Nom SYMBOLIQUE>.]]  ou  \N{<Nom SYMBOLIQUE>}
                                                 

                   EXEMPLES :
                   

                       La FORME [[.IS2.]]       reprsente le caractre RECORD SEPARATOR ( RS ), de code HEXA \x1E
                                                                              
                       La FORME \N{plus-sign} reprsente le signe ADDITION ( + ), de code HEXA \x2B
                                                                    


               TRS IMPORTANT : La CASSE des noms SYMBOLIQUES doit OBLIGATOIREMENT tre respecte !
                                


               REMARQUE : la forme \N{....} peut galement s'employer ENTRE CROCHETS ( Voir CI-DESSUS )
                                                              


               LISTE des Noms SYMBOLIQUES possibles :
               

                   =======================================================
                   |  Nom SYMBOLIQUE POSIX  | CARACTRE |  VALEUR Caractre  |
                   =======================================================
                   |  NUL                   |    NUL    |   000   |   \x00   |
                   |  SOH                   |    SOH    |   001   |   \x01   |
                   |  STX                   |    STX    |   002   |   \x02   |
                   |  ETX                   |    ETX    |   003   |   \x03   |
                   |  EOT                   |    EOT    |   004   |   \x04   |
                   |  ENQ                   |    ENQ    |   005   |   \x05   |
                   |  ACK                   |    ACK    |   006   |   \x06   |
                   |  alert                 |    BEL    |   007   |   \x07   |
                   |  backspace             |    BS     |   008   |   \x08   |
                   |  tab                   |    TAB    |   009   |   \x09   |
                   |  newline               |    LF     |   010   |   \x0A   |
                   |  vertical-tab          |    VT     |   011   |   \x0B   |
                   |  form-feed             |    FF     |   012   |   \x0C   |
                   |  carriage-return       |    CR     |   013   |   \x0D   |
                   |  SO                    |    SO     |   014   |   \x0E   |
                   |  SI                    |    SI     |   015   |   \x0F   |
                   |  DLE                   |    DLE    |   016   |   \x10   |
                   |  DC1                   |    DC1    |   017   |   \x11   |
                   |  DC2                   |    DC2    |   018   |   \x12   |
                   |  DC3                   |    DC3    |   019   |   \x13   |
                   |  DC4                   |    DC4    |   020   |   \x14   |
                   |  NAK                   |    NAK    |   021   |   \x15   |
                   |  SYN                   |    SYN    |   022   |   \x16   |
                   |  ETB                   |    ETB    |   023   |   \x17   |
                   |  CAN                   |    CAN    |   024   |   \x18   |
                   |  EM                    |    EM     |   025   |   \x19   |
                   |  SUB                   |    SUB    |   026   |   \x1A   |
                   |  ESC                   |    ESC    |   027   |   \x1B   |
                   |  IS4                   |    FS     |   028   |   \x1C   |
                   |  IS3                   |    GS     |   029   |   \x1D   |
                   |  IS2                   |    RS     |   030   |   \x1E   |
                   |  IS1                   |    US     |   031   |   \x1F   |
                   |  space                 |    SP     |   032   |   \x20   |
                   |  exclamation-mark      |     !     |   033   |   \x21   |
                   |  quotation-mark        |     "     |   034   |   \x22   |
                   |  number-sign           |     #     |   035   |   \x23   |
                   |  dollar-sign           |     $     |   036   |   \x24   |
                   |  percent-sign          |     %     |   037   |   \x25   |
                   |  ampersand             |     &     |   038   |   \x26   |
                   |  apostrophe            |     '     |   039   |   \x27   |
                   |  left-parenthesis      |     (     |   040   |   \x28   |
                   |  right-parenthesis     |     )     |   041   |   \x29   |
                   |  asterisk              |     *     |   042   |   \x2A   |
                   |  plus-sign             |     +     |   043   |   \x2B   |
                   |  comma                 |     ,     |   044   |   \x2C   |
                   |  hyphen                |     -     |   045   |   \x2D   |
                   |  period                |     .     |   046   |   \x2E   |
                   |  slash                 |     /     |   047   |   \x2F   |
                   |  zero                  |     0     |   048   |   \x30   |
                   |  one                   |     1     |   049   |   \x31   |
                   |  two                   |     2     |   050   |   \x32   |
                   |  three                 |     3     |   051   |   \x33   |
                   |  four                  |     4     |   052   |   \x34   |
                   |  five                  |     5     |   053   |   \x35   |
                   |  six                   |     6     |   054   |   \x36   |
                   |  seven                 |     7     |   055   |   \x37   |
                   |  eight                 |     8     |   056   |   \x38   |
                   |  nine                  |     9     |   057   |   \x39   |
                   |  colon                 |     :     |   058   |   \x3A   |
                   |  semicolon             |     ;     |   059   |   \x3B   |
                   |  less-than-sign        |     <     |   060   |   \x3C   |
                   |  equals-sign           |     =     |   061   |   \x3D   |
                   |  greater-than-sign     |     >     |   062   |   \x3E   |
                   |  question-mark         |     ?     |   063   |   \x3F   |
                   |  commercial-at         |     @     |   064   |   \x40   |
                   |  left-square-bracket   |     [     |   091   |   \x5B   |
                   |  backslash             |     \     |   092   |   \x5C   |
                   |  right-square-bracket  |     ]     |   093   |   \x5D   |
                   |  circumflex            |     ^     |   094   |   \x5E   |
                   |  underscore            |     _     |   095   |   \x5F   |
                   |  grave-accent          |     `     |   096   |   \x60   |
                   |  left-curly-bracket    |     {     |   123   |   \x7B   |
                   |  vertical-line         |     |     |   124   |   \x7C   |
                   |  right-curly-bracket   |     }     |   125   |   \x7D   |
                   |  tilde                 |     ~     |   126   |   \x7E   |
                   |  DEL                   |    DEL    |   127   |   \x7F   |
                   ======================================================


               NOTE : <NOM SYMBOLIQUE> peut, galement, reprsenter le caractre LUI-MME !
                                                   

                   EXEMPLES :
                   

                       [[.].]] reprsente le caractre CROCHET FERMANT (])          ( Prfrer les FORMES ] ou \] )
                                                                                
                       \N{{}   reprsente le caractre ACCOLADE OUVRANTE ({)        ( Prfrer les FORMES { ou \{ )
                                                                                



        M) Un caractre de CLASSE QUIVALENTE :
           

               La FORME [=<Car>=] donne TOUS les QUIVALENTS du CARACTRE <Car>, QUELLES QUE SOIENT la CASSE,
                                                   
                    l'ACCENTUATION, la TAILLE et autres SPCIFICITS des caractres QUIVALENTS
                                                      

               NOTE : <Car> peut donc, aussi, tre un caractre DOUBLE ou un NOM SYMBOLIQUE du tableau PRCDENT
                                                                            

                   EXEMPLES : ( Pour un fichier ANSI, avec CARACTRES de code ASCII < 256 )
                                                             

                       [[=a=]]    reprsente UN des 15 CARACTRES A, a, , , , , , , , , , , ,  ou 
                       
                       [[=two=]]  reprsente le CARACTRE 2 ou le CARACTRE EXPOSANT 
                       
                       [[=Ae=]]   reprsente la LIGATURE  ou la LIGATURE 
                       
                       [[=SS=]]   reprsente le CARACTRE ALLEMAND 
                       
                       [[===]]   reprsente le CARACTRE =   ( Cas d'un caractre NON LITTRAL, ni SYMBOLIQUE ni DOUBLE )
                                                                           

               Pour les Noms SYMBOLIQUES des caractres de CONTRLE, on a :
                                           

                   [[=tab=]]              =  Caractre TABULATION,      de code ASCII  \x09
                   [[=newline=]]          =  Caractre LINE FEED,       de code ASCII  \x0A
                   [[=vertical-tab=]]     =  Caractre VERTICAL TAB,    de code ASCII  \x0B
                   [[=form-feed=]]        =  Caractre FORM FEED,       de code ASCII  \x0C
                   [[=carriage-return=]]  =  Caractre CARRIAGE RETURN, de code ASCII  \x0D


                   TOUS les AUTRES Noms SYMBOLIQUES des codes de CONTRLE ( [[=NUL=]], [[=SI=]], [[=ESC=]], ... ) repr-
                                                    
                       sentent UN des CARACTRES de la LISTE  [\x00-\x08\x0E-\x1F'\-\x7F\x81\x8D\x8F\x90\x96\x97\x9D\xAD]
                                                            



        N) REMARQUE IMPORTANTE sur les CLASSES ou LISTES de forme NGATIVE :
           

               Quand la forme NGATIVE d'une CLASSE ou d'une LISTE de CARACTRES ne fait PAS, directement ou
                                                                      
                   implicitement, RFRENCE  un CARACTRE 'FIN de LIGNE', celui-ci est alors AUTOMATIQUEMENT INCLUS
                                                                         
                   dans la CLASSE ou LISTE cherche
                               


               EXEMPLES :
               

                   [^\d]+ signifie une SUITE, NON VIDE, de caractres NON CHIFFRES ni EXPOSANT, c'est  dire DIFFRENT
                                                                  
                       de la LISTE [0123456789] . Aussi, l'expression RGULIRE  [^\d]+  trouvera, entre AUTRES :
                                                            

                           - un caractre ALPHABTIQUE
                                          
                           - un caractre de PONCTUATION
                                             
                           - un caractre de code ASCII > 127
                                                  
                           - un caractre de CONTRLE de code ASCII < 32, dont LF ( \x0A) et/ou CR (\x0D)
                                                                     
                           - .................................


                       DONC, si le fichier examin NE COMPORTE AUCUN chiffre, l'expression RGULIRE  [^\d]+ slection-
                                                                
                           nera ABSOLUMENT TOUS les CARACTRES du fichier ( quivalant  CTRL + A ), puisqu'elle INCLUT
                                                                           
                           les 'FINS de LIGNE' !!!
                                

                           Il en serait de mme pour les  SEPT expressions RGULIRES ci-dessous :
                                                                       

                               [^[:digit:]]+  ,  [^[:d:]]+  ,  [^0-9]+  ,  \P{digit}+  ,  \P{d}+  ,  \Pd+  et  \D+
                                                              
                                   ( Voir parties G et H, ci-dessus )
                                                  


                   [^[:cntrl:]]+  ou  \P{cntrl}+, par CONTRE, correspondent BIEN  l'INTGRALIT de CHAQUE ligne d'un
                                                        
                       FICHIER, si celui-ci ne contient AUCUN caractre de CONTRLE, AUTRES que les DEUX caractres
                                                          
                       LF (\x0A) et/ou CR (\x0D), selon le TYPE du fichier ( Windows, Unix ou Mac )
                                                             


                   ([^@\r\n]*@[^@\r\n]*@)+[^@\r\n]*  trouve la PLUS GRANDE SUITE de caractres CONTENANT un nombre PAIR,
                                                      
                        NON NUL, de caractres '@' ( AROBASE )
                                             


               CONCLUSION :
               

                   BIEN vrifier TOUS les caractres POSSIBLES, satisfaisant la forme NGATIVE d'une CLASSE ou d'une
                                                            
                       LISTE de CARACTRES, AVANT de l'ENGLOBER dans une expression RGULIRE plus IMPORTANTE !
                                                    



        0) Exemple RCAPITULATIF :
           

               L'Expression RGULIRE  Mr[\x21\033\a\c~[:Upper:]\h[.Dz.]\N{slash}[=d=]p-t\\-]\RGuy[^.[:u:]^] THEVENOT\+
                                       

               trouve la CHANE 'Mr', suivie d'UNE Lettre MAJUSCULE, MME ACCENTUE,  OU  de l'UN des 20 CARACTRES :
                                                                                           
                   !, ESC, BEL, RS, SP, TAB, \xA0, Dz, /, D, d, , , p, q, r, s, t, \, -

               suivi d'UN des 6 CARACTRES de TYPE 'Fin de LIGNE' \r\n|[\n\x0B\f\r\x85], suivi de la CHANE 'Guy'
                                                                                         
               suivie d'UN caractre, AUTRE que . et ^ et 1 Lettre MAJUSCULE, MME ACCENTUE
                                      
               suivi de la CHANE ' THEVENOT+'
                                   

               Cette expression RGULIRE trouve, par exemple, le TEXTE :    MrGuy@ THEVENOT+
                                                                    



 2) SQUENCES d'CHAPPEMENT :
    

        Les SQUENCES d'CHAPPEMENT sont des SUITES, NON NULLES, de caractres UNIQUEMENT LITTRAUX
                                      


        Elles DBUTENT par le caractre d'CHAPPEMENT \Q et se TERMINENT par le caractre d'CHAPPEMENT \E
                                                                                     


                EXEMPLES :
                

                    \Q+*?$\E  cherche la CHANE de 4 caractres '+*?$'
                                              
                    \Q\*+\Ea+ cherche la CHANE '\*+', suivie de 1 ou PLUSIEURS lettres a MINUSCULE
                                                              

                        ( Voir PLUS LOIN, la description des QUANTIFICATEURS )
                                                    

                NOTE :
                
                    Si le caractre d'CHAPPEMENT \E est ABSENT, TOUS les caractres placs, APRS le caractre
                                                                     
                        d'CHAPPEMENT \Q JUSQU' la FIN de l'expression RGULIRE, sont considrs LITTRAUX
                                                             

                    EXEMPLES :
                    

                        \Q[]{}()<> trouve la CHANE de 8 caractres '[]{}()<>'
                                                
                        \Q\*+a+    trouve la CHANE de 5 caractres '\*+a+'
                                                   


                IMPORTANT :
                

                    - Les SQUENCES d'CHAPPEMENT sont INOPRANTES dans les LISTES de caractres entre CROCHETS
                                                         

                              Par exemple :

                          l'expression RGULIRE  [0-9\Q[-]\Ea-z]
                                         

                              NE signifie PAS :
                                          

                                  1 CHIFFRE  ou  un CROCHET ([])  ou  un TIRET (-)  ou  une lettre MINUSCULE
                                                                  

                              mais SIGNIFIE :
                                   

                                  1 CHIFFRE  ou  la LETTRE MAJUSCULE Q  ou un CROCHET OUVRANT ([)  ou un TIRET (-),
                                                             
                                      suivi de la CHANE 'Ea-z]' !
                                                          


                          l'expression RGULIRE  [0-9\Qa-z\E@#] cherche  un CHIFFRE  ou  une lettre MINUSCULE  ou
                                                                       
                              UN des QUATRE caractres  'Q'  ,  'E'  ,  '@'  ou  '#'
                                           


                    - L'expression RGULIRE  \Q+*?$\E{2,4}a+  quivaut, en fait,  l'expression \Q+*?\E${2,4}a+, soit :
                                                                                  

                          les 3 CARACTRES '+*?', suivie de 2  4 CARACTRES '$', suivie de 1 ou PLUSIEURS 'a' MINUSCULE
                                                                     

                              NOTE : crite sous cette FORME, \Q+*?\E${2,4}a+  =>  MESSAGE 'Invalid regular expression'
                                                                         


                          MAIS  \Q+*?${2,4}a+ ( Caractre d'CHAPPEMENT \E ABSENT ) reprsente la chane LITTRALE
                                                                               
                              des 11 caractres  '+*?${2,4}a+'
                                                


                    - L'expression RGULIRE  (\Q+*?$\E){2,4} reprsente de 2  4 FOIS la CHANE '+*?$'
                                                                         


                    - La RegExp  abc\Q\Edef  signifie, en fait, la CHANE 'abcdef' car \Q\E reprsente une chane VIDE
                                                                                              



 3) ALTERNATIONS :
    

        L'oprateur d'ALTERNATION est le symbole LIGNE VERTICALE (|) qui joue le rle de SPARATEUR entre 2 GABARITS
                                                                    
            SIMULTANMENT recherchs
            

                NOTE :
                
                    Cet OPRATEUR a la PLUS FAIBLE priorit d'EXCUTION ( Voir PLUS LOIN )
                                               

                        Aussi, le REGROUPEMENT, par un COUPLE de PARENTHSES (), est parfois NCESSAIRE afin de
                                                         
                            BIEN IDENTIFIER les diffrentes ALTERNATIVES
                                 


                EXEMPLES :
                

                    abc|def            cherche les CHANES   'abc'    ou  'def'
                                                                 
                    ab(c|d)ef          cherche les CHANES  'abcef'   ou  'abdef'
                                                             
                    ^abc|def$          cherche la CHANE  'abc' en DBUT de ligne  ou  la CHANE 'def' en FIN de ligne
                                                                                      
                    ^(abc|def)$        cherche les LIGNES, constitues des SEULES chanes  'abc'  ou  'def'
                                                                             
                    abc(def|xyz)       cherche les CHANES  'abcdef'  ou  'abcxyz'
                                                         
                    abc(def|xyz|)      cherche les CHANES  'abcdef'  ou  'abcxyz'  ou  'abc'
                                                                
                    chat(ire|on|) :   cherche les CHANES 'chatire :'  ou  'chaton :'  ou  'chat :'
                                                                            
                    chatire|on| :     cherche les CHANES 'chatire'  ou  'on'  ou  ' :'
                                                                            


                IMPORTANT :
                

                    - Quand un jeu d'ALTERNATIVES est ENTOUR de PARENTHSES, l'ensemble forme un GROUPE de CAPTURE :
                                                          

                          - qui peut tre SUIVI de QUANTIFICATEURS
                                          
                          - qui permet l'utilisation d'une RFRENCE ARRIRE ou d'une RFRENCE de GROUPE, relative 
                                                                     
                                ce GROUPE de CAPTURE  ( Voir ces notions, PLUS LOIN )
                                                         

                                    (a|b)c\1   cherche UNE des DEUX chanes 'aca' ou 'bcb'
                                                               

                                    (a|b){2,3} cherche UNE des 12 chanes :
                                             
                                        'aa'   ,  'ab'   ,  'ba'   ,  'bb'
                                                                 
                                        'aaa'  ,  'aab'  ,  'aba'  ,  'abb'  ,  'baa'  ,  'bab'  ,  'bba'  ,  'bbb'
                                                                                          


                    - La PREMIRE alternative d'une LISTE, qui est TROUVE dans la chane SUJET, est UTILISE, et ce
                                                                                 
                          MME SI 1 ou PLUSIEURS AUTRES alternatives, places APRS, pouvaient AUSSI convenir
                                                             

                              => l'ORDRE des diffrentes ALTERNATIVES peut donc MODIFIER la RECHERCHE
                                                               

                          Soit la chane SUJET  'Elle a fait trois longueurs de bassin. c'est trop long !'
                                            

                              Si l'expression RGULIRE vaut :

                                  -  long|longueur  => SEULS les 4 CARACTRES 'long' sont trouvs, et donc la CHANE
                                          
                                                           'longueur' NE pourra PAS tre trouve avec cette RegExp
                                                                                       

                                  -  longueur|long  => les CHANES 'longueur' ou 'long' seront trouves
                                                             


                          La RegExp  (a|ab)b  trouve la CHANE 'ab'  dans la chane SUJET 'abbcd'
                                                                           
                                 et  (ab|a)b  trouve la CHANE 'abb' dans la chane SUJET 'abbcd'
                                                                          


                    - Le symbole d'ALTERNATION est considr comme un caractre LITTRAL dans une liste ENTRE CROCHETS :
                                                                           

                          => L'expression RGULIRE [les|la|le] peut, PLUS simplement, s'crire [aels|]
                                                                                 


                REMARQUE :
                

                    La recherche des VOYELLES MINUSCULES , par exemple, est PLUS efficace et le GABARIT PLUS lisible
                                                         
                        sous la forme d'une CLASSE de caractres [aeiouy] qu'avec le JEU d'ALTERNATIVES (a|e|i|o|u|y)
                                                                        



 4) ASSERTIONS :
    

        Les ASSERTIONS sont des expressions RGULIRES, de longueur NULLE, ne consommant AUCUN caractre dans la
                                                      
            chane SUJET  analyser, qui reprsentent, NON PAS un CARACTRE, mais une POSITION, dans la chane SUJET,
                                                             
            SATISFAISANT une CONDITION particulire, AVANT ou APRS la position COURANTE du POINTEUR de RECHERCHE
                                


        DEUX types d'ASSERTIONS sont possibles :
        

            - Les assertions SIMPLES,   aussi appeles ANCRES,     reprsentent des positions STANDARD
                                                                                 
            - les assertions COMPLEXES, aussi appeles LOOKAROUND, reprsentent des positions UTILISATEUR
                                                                           
                  ( qui seront tudies PLUS LOIN )
                                        


        BUG : Dans NOTEPAD++, les ASSERTIONS ARRIRE, ( Voir PLUS LOIN ) c'est  dire :
                               

                  - les ANCRES      places AVANT l'expression RGULIRE cherche ( SAUF ^ )
                                                                         
                  - les LOOKAROUNDS, placs AVANT l'expression RGULIRE cherche ( LOOKBEHINDS )
                                                                    

                      consomment,  TORT, UN ou PLUSIEURS caractres, dplaant, aussi,  TORT, la position COURANTE
                                                                               
                          du POINTEUR de recherche
                             

                  CONSQUENCE : Si la RegExp de recherche, qui suit l'assertion ARRIRE, est un SEUL caractre,
                                                             
                                    QUELCONQUE, du genre . ou \w , le RSULTAT de la recherche est, en gnral, FAUX
                                                                                      

                                    EXEMPLES :
                                    

                                        \b.  ,  \B.  ,  \A\w  ne donnent PAS le rsultat ESCOMPT !
                                                               

                                        MAIS   .\b  ,  .\B  ,  .\z  ,  .\Z  fonctionnent CORRECTEMENT
                                                                        


                                           .(?=.) trouve bien TOUS les caractres, DIFFRENTS de \n, \f et \r, SUIVIS
                                                                         
                                                      d'un caractre DIFFRENT de \n, \f ou \r, c'est  dire TOUS les
                                                                                    
                                                      caractres du fichier COURANT, SAUF le DERNIER de CHAQUE ligne
                                                                                     

                                           (?<=.). DEVRAIT trouver TOUS les caractres DIFFRENTS de \n, \f et \r,
                                                                                   
                                                       PRCDS d'un caractre DIFFRENT de \n, \f ou \r, c'est  dire
                                                                       
                                                       TOUS les caractres du fichier COURANT, SAUF le PREMIER de CHAQUE
                                                                                           
                                                       ligne


                                                    MAIS, en fait, n'en trouve effectivement qu'UN sur DEUX, environ !
                                                                                            


        RAPPEL :
        

            Un caractre de MOT ( \w ) correspond  un (au) CARACTRE :
                                          

                - TIRET BAS                                             :  [_]
                  
                - CHIFFRE ou ASSIMIL                                   :  [0-9]
                                                             
                - ALPHABTIQUE MINUSCULE, ACCENTU ou NON ou ASSIMIL   :  [a-z]
                               
                - ALPHABTIQUE MAJUSCULE, ACCENTU ou NON ou ASSIMIL   :  [A-Z]
                               



        Une ASSERTION SIMPLE, appele ANCRE,  peut tre, au CHOIX, la POSITION :
                                            


        A) TOUT DBUT du fichier COURANT :  \A  ou  \`  ou  (?-m)^
                           

               EXEMPLE : \AN\+\+ cherche la CHANE 'N++' au TOUT DBUT du fichier COURANT
                                           


               ATTENTION :
               

                   Si la PREMIRE ligne du fichier n'est PAS VIDE ( Voir Problme ci-DESSUS ) :
                                                                  

                       \A\w trouve,  TORT, le 1ER MOT du fichier   , au lieu de la 1RE LETTRE, UNIQUEMENT
                                                                
                       \A.  trouve,  TORT, la 1RE LIGNE du fichier, au lieu du 1ER CARACTRE,  UNIQUEMENT
                                                                  


                   Si la PREMIRE ligne du fichier commence par des CHIFFRES ( Voir Problme ci-DESSUS ) :
                                                                             
                       (?-m)^\d trouve,  TORT, ce NOMBRE, au lieu du 1ER CHIFFRE, au TOUT DBUT du fichier
                                                         


               NOTE : La FORME (?-m)^, IDENTIQUE  \A, sera explique par la SUITE
                                                                  

                          L'OPTION (?-m) signifie que l'ASSERTION ^ ne concerne que le TOUT DBUT de fichier
                                                                       



        B) TOUTE FIN du fichier COURANT :  \z  ou  \'  ou  (?-m)$
                            

               EXEMPLES :
               

                   OK\.\z cherche la CHANE 'OK.' en TOUTE FIN de fichier
                                            
                   .\z    cherche le DERNIER caractre du fichier
                                  

                       => la DERNIRE ligne NE DOIT PAS se terminer par un caractre de 'FIN de LIGNE'
                                                               

                   OK\.\r\n\z' cherche la CHANE 'OK.\r\n' en TOUTE FIN de fichier
                                             

                       => la DERNIRE ligne DOIT se terminer par un caractre de 'FIN de LIGNE' WINDOWS ( \r\n )
                                                   


               NOTE : La FORME (?-m)$, IDENTIQUE  \z, sera explique par la SUITE
                                                                  

                          L'option (?-m) signifie que l'ASSERTION $ ne concerne que la TOUTE FIN de fichier
                                                                       



        C) FIN de la DERNIRE LIGNE du fichier COURANT :  \Z
               

               EXEMPLES :
               

                   OK\.\Z cherche la CHANE 'OK.' en FIN de la DERNIRE ligne du fichier
                                            
                   .\Z    cherche le DERNIER caractre de la DERNIRE ligne du fichier
                                         


               REMARQUE : En fait, la chane SUJET, en FIN de la DERNIRE ligne, peut tre SUIVIE, ou NON, par une
                                                            
                              SUITE QUELCONQUE de caractres \r , \n  ou  \f
                                             

                                  => \Z  quivaut  l'ASSERTION AVANT, appele LOOKAHEAD (?=[\n\f\r]*\z)
                                                                
                                        ( Voir PLUS LOIN )
                                               



        D) TOUT DBUT de LIGNE :  ^
               

               EXEMPLES :
               

                   ^N\+\+ cherche la CHANE 'N++' en TOUT DBUT des LIGNES du fichier COURANT
                                            
                   ^.     cherche le PREMIER caractre de CHAQUE ligne     du fichier COURANT
                                                 


               REMARQUES :
               

                   En fait l'ASSERTION ^ reprsente la POSITION :
                                            

                       - ENTRE le TOUT DBUT du fichier COURANT et le PREMIER caractre du fichier
                                                    
                       - ENTRE un caractre 'FIN de LIGNE'      et le PREMIER caractre de la ligne SUIVANTE
                                                                  

                             => ^ quivaut  l'ALTERNATIVE ENTRE les 2 ASSERTIONS ARRIRE  (\A|(?<=[\n\f\r]))
                                                          
                                    qui NE fonctionne PAS  car \A NON PLUS ! ( Voir PROBLME ci-dessus )
                                                           


                   Si l'OPTION (?-m), explique par la SUITE, est place DEVANT l'expression RGULIRE, l'ASSERTION ^
                                                                                   
                       est QUIVALENTE  l'ASSERTION \A  et reprsente la POSITION ENTRE le TOUT DBUT du fichier et
                                                       
                       le PREMIER caractre du fichier
                          



        E) TOUTE FIN de LIGNE :  $
               

               EXEMPLES
               

                   OK\.$ cherche la CHANE 'OK.' en TOUTE FIN des LIGNES du fichier COURANT
                                            
                   .$    cherche le DERNIER caractre de CHAQUE ligne    du fichier COURANT
                                                


               REMARQUES :
               

                   En fait l'ASSERTION $ reprsente la POSITION :
                                            

                       - ENTRE le DERNIER caractre d'une LIGNE et un caractre 'FIN de LIGNE'
                                                            
                       - ENTRE le DERNIER caractre du fichier  et la TOUTE FIN du fichier COURANT
                                                      

                             => $ quivaut  l'ALTERNATIVE ENTRE les 2 ASSERTIONS AVANT  ((?=[\n\f\r])|\z)
                                                         


                   Si l'OPTION (?-m), explique par la SUITE, est place DEVANT l'expression RGULIRE, l'ASSERTION $
                                                                                   
                       est QUIVALENTE  l'ASSERTION \z  et reprsente la POSITION ENTRE le DERNIER caractre du fichier
                                                   
                       et la TOUTE FIN du fichier
                             



        F) FRONTIRE de MOT :  \b
               

               Elle reprsente la POSITION :
                                  

                       - ENTRE le TOUT DBUT du fichier OU 1 caractre NON de MOT (\A|\W) et 1 caractre de MOT (\w)
                   OU                                                         
                       - ENTRE 1 caractre de MOT (\w) et 1 caractre NON de MOT OU la TOUTE FIN de fichier (\W|\z)
                                                                                

                             RAPPEL : \n, \f ou \r reprsente GALEMENT des caractres NON de MOT
                                                            


               Cette ASSERTION quivaut donc  l'ALTERNATIVE :
                                        

                       - (\A|(?<=\W))  si le caractre SUIVANT   est un caractre de MOT (\w)
                   ou                                               
                       - ((?=\W)|\z)   si le caractre PRCDENT est un caractre de MOT (\w)
                   ou                                              
                       - (?<=\w)       si le caractre SUIVANT   est un caractre NON de MOT (\W)
                   ou                                                 
                       - (?=\w)        si le caractre PRCDENT est un caractre NON de MOT (\W)
                                                                     


                             =>   \b\w  =  (\A|(?<=\W))\w    et    \w\b  =  \w((?=\W)|\z)
                                            
                             et   \b\W  = (?<=\w)\W          et    \W\b  =  \W(?=\w)
                                                  


               BUG : les FORMES  \b\w  et  (\A|(?<=\W))\w  NE donnent PAS le RSULTAT escompt ( Voir PROBLME
                                                                   
                         PLUS HAUT et suite DYSFONCTIONNEMENT de \A )
                                   

                             => Employer UNIQUEMENT la FORME  (^|(?<=\W))\w
                                                    


               EXEMPLES :
               

                   (^|(?<=\W))\w|\w((?=\W)|\z)  ou  (^|(?<=\W))\w|\w\b  trouve le 1ER et DERNIER car. de TOUS les MOTS
                                                                
                   (?<=\w)\W|\W(?=\w)  ou  \b\W|\W\b trouve le 1ER et DERNIER caractre de TOUS les NON MOTS
                                                  


                   \be  ou  (^|(?<=\W))e  cherche TOUS les caractres 'e' MINUSCULES, en DBUT de MOT
                                                         
                   e\b  ou  e((?=\W)|\z)  cherche TOUS les caractres 'e' MINUSCULES, en FIN   de MOT
                                                         
                   \be|e\b  ou  (^|(?<=\W))e|e((?=\W)|\z) cherche TOUS les 'e' MINUSCULES en DBUT ou FIN de MOT
                                      


                   (^|(?<=\W))\w           cherche TOUS les caractres de MOT, en DBUT de MOT
                                                              
                   \w((?=\W)|\z)  ou  \w\b cherche TOUS les caractres de MOT, en FIN de MOT
                                                          


                   La FORME .\b cherche :
                            

                           - un caractre de MOT, SUIVI d'un caractre NON de MOT, y COMPRIS \n, \f ou \r
                       ou                                                  
                           - un caractre NON de MOT, DIFFRENT de [\n\f\r], SUIVI d'un caractre de MOT
                                                                 


                   BUG : la FORME \b.  DEVRAIT trouver :
                                 

                             - un caractre de MOT, PRCD d'un caractre NON de MOT, y COMPRIS \n, \f ou \r
                         ou                                          
                             - un caractre NON de MOT, DIFFRENT de [\n\f\r], PRCD d'un caractre de MOT
                                                                   

                                 et trouve,  TORT, TOUS les caractres DIFFRENTS de [\n\f\n] ! ( Voir ci-DESSUS )
                                                                        



        G) FRONTIRE de NON MOT :  \B
               

               Elle reprsente la POSITION :
                                  

                       - ENTRE 1 caractre NON de MOT (\W) et 1 AUTRE caractre NON de MOT (\W), y COMPRIS \n, \f ou \r
                   OU                                                   
                       - ENTRE 1 caractre de MOT (\w)     et 1 AUTRE caractre de MOT (\w)
                                                                    


               Cette ASSERTION quivaut donc  l'ALTERNATIVE :
                                        

                       - (?<=\w)  si le caractre SUIVANT   est un caractre de MOT (\w)
                   ou                                                
                       - (?=\w)   si le caractre PRCDENT est un caractre de MOT (\w)
                   ou                                              
                       - (?<=\W)  si le caractre SUIVANT   est un caractre NON de MOT (\W), y compris \n, \f ou \r
                   ou                                                          
                       - (?=\W)   si le caractre PRCDENT est un caractre NON de MOT (\W), y compris \n, \f ou \r
                                                                             


                             =>   \B\w  =  (?<=\w)\w    et    \w\B  =  \w(?=\w)
                                            
                             et   \B\W  =  (?<=\W)\W    et    \W\B  =  \W(?=\W)
                                            


               BUGS : les FORMES  \B\w  ou  (?<=\w)\w, d'une part et  \B\W  ou  (?<=\W)\W, d'autre part, NE donnent PAS
                                                                           
                          le RSULTAT escompt  ( Voir PROBLME PLUS HAUT, et suite RPTITION \w\w ou \W\W )
                                                                  


               EXEMPLES :
               

                   \Be  ou  (?<=\w)e  cherche TOUS les caractres 'e' MINUSCULES, PRCDS d'un caractre de MOT
                                                                         
                   e\B  ou  e(?=\w)   cherche TOUS les caractres 'e' MINUSCULES, SUIVIS   d'un caractre de MOT
                                                                            
                   \Be|e\B  ou  (?<=\w)e|e(?=\w) cherche TOUS les 'e' MINUSCULES, PRCDS ou SUIVIS d'un car. de MOT
                                                        


                   (?<=\w)\w  ou  \B\w  DEVRAIT trouver TOUS les car. de MOT, PRCDS d'un caractre de MOT  ( BUG ! )
                                                                          
                   \w(?=\w)   ou  \w\B  cherche TOUS les caractres de MOT,   SUIVIS   d'un caractre de MOT
                                                                                


                   La FORME .\B cherche :
                            

                           - un caractre de MOT, SUIVI d'un AUTRE caractre de MOT
                       ou                                          
                           - un caractre NON de MOT, DIFFRENT de [\n\f\r], SUIVI d'un AUTRE caractre NON de MOT,
                                                               
                                 y COMPRIS \n, \f ou \r
                                   


                   BUG : la FORME \B.  DEVRAIT trouver :
                                 

                             - un caractre de MOT, PRCD d'un AUTRE caractre de MOT
                         ou                                          
                             - un caractre NON de MOT, DIFFRENT de [\n\f\r], PRCD d'un AUTRE caractre NON de MOT,
                                                                 
                                   y COMPRIS \n, \f ou \r
                                     

                                 et trouve,  TORT, TOUS ces caractres, UNE fois sur DEUX !  ( Voir problme PLUS HAUT,
                                                                                   
                                     et suite RPTITION \w\w ou \W\W )
                                              



        H) DBUT de MOT :  \<
               

               Elle reprsente la POSITION :
                                  

                   ENTRE le TOUT DBUT du fichier OU 1 caractre NON de MOT (\A|\W) et 1 caractre de MOT (\w)
                                                                        

                   EXEMPLE : \<e cherche TOUS les CARACTRES 'e' MINUSCULES, figurant en DBUT de MOT
                                                                  


               BUG : Suite au PROBLME, concernant les ASSERTIONS ARRIRE dans NOTEPAD++, voqu PLUS HAUT, la RegExp
                                            
                         '\<e', applique  la chane SUJET 'eeeeeeeeabc' slectionne,  TORT, 'eeeeeeee'
                                                                         

                     De mme, la RegExp \<. slectionne,  TORT, TOUS les caractres de MOT du fichier COURANT !
                                                                    

                         => Employer UNIQUEMENT l'ASSERTION compose  (^|(?<=\W)),  la PLACE de l'ASSERTION \<
                                                                               

                         EXEMPLE : Applique  la chane SUJET 'eeeeeeeeabc', l'expression RGULIRE (^|(?<=\W))e
                                                                                   
                                       trouve, CORRECTEMENT, QUE le PREMIER caractre 'e' MINUSCULE de la chane
                                                             
                                       SUJET 'eeeeeeeeabc'
                                       



        I) FIN de MOT :  \>
               

               Elle reprsente la POSITION :
                                  

                   ENTRE 1 caractre de MOT (\w) et 1 caractre NON de MOT OU la TOUTE FIN de fichier (\W|\z)
                                                             

                       EXEMPLE : e\> cherche TOUS les CARACTRES 'e' MINUSCULES, figurant en FIN de MOT
                                                                      


               On peut, cependant, employer les ASSERTIONS QUIVALENTES, ci-DESSOUS :
                                                

                   ((?=\W)|\z)  ou   ((?=\W)|\')  ou  ((?=\W)|\Z)  ou  ((?=\W)|$)
                                      


               EXEMPLES :
               

                   Les expressions RGULIRES, ci-dessous, trouvent, TOUTES, le DERNIER caractre de CHAQUE MOT du
                                                                                    
                       fichier COURANT :


                           \w((?=\W)|\z)   ,   \w((?=\W)|\')   ,   \w((?=\W)|\Z)   ,   \w((?=\W)|$)   ,   \w\>   ou   .\>
                                                               



        J) FIN de la PRCDENTE recherche :  \G
               


               Elle reprsente UNE des POSITIONS suivantes :
                               

                   -  le TOUT DBUT du fichier COURANT
                         
                   -  la position JUSTE APRS la FIN de la PRCDENTE recherche
                                         
                   -  la position du CURSEUR, dplac VOLONTAIREMENT par l'UTILISATEUR
                                                      


               EXEMPLE :
               

                   Soit une partie de code ADN  'TGAATTCTTGAATTCAAATGAAGGTTCTGACGTCATGATGAC', en 1RE ligne d'un fichier
                                                                       

                       Dans cette SQUENCE, la suite des 3 BASES 'TGA' :
                                                          

                           - est un CODON, aux positions SOULIGNES, ci-dessus ( Positions 1, 19 et 28 )
                                                                            
                           - n'est PAS un CODON, aux positions en POINTILLS, ci-dessus ( Positions 9, 36 et 39 )
                                                                              


                       Alors, l'expression RGULIRE trouve,  COMPTER de la position COURANTE de recherche :
                                                           

                           la PLUS LONGUE suite de BASES, finissant par 'TGA'                      si   .*TGA
                                                                                          
                           la PLUS LONGUE suite de BASES, MULTIPLE de 3 car., finissant par 'TGA'  si   (\w\w\w)*TGA
                                                                        
                           la PLUS LONGUE suite de CODONS, finissant par le CODON 'TGA'            si   \G(\w\w\w)*TGA
                                                                               

                           la PLUS PETITE suite de BASES, finissant par 'TGA'                      si   .*?TGA
                                                                                          
                           la PLUS PETITE suite de BASES, MULTIPLE de 3 car., finissant par 'TGA'  si   (\w\w\w)*?TGA
                                                                        
                           la PLUS PETITE suite de CODONS, finissant par le CODON 'TGA'            si   \G(\w\w\w)*?TGA
                                                                               

                          NOTE : Le QUANTIFICATEUR *?, de type 'LAZY', sera expliqu par la SUITE
                                                                   



 5) COMMENTAIRES :
    

        La FORME (?#.....), utilise en DEHORS d'une CLASSE de CARACTRES, reprsente un COMMENTAIRE de l'UTILISATEUR
                                                 

            TOUS les caractres placs ENTRE la chane '(?#' et la 1ERE PARENTHSE FERMANTE qui suit, sont IGNORS
                                                                       
                par le MOTEUR de recherche
                       


            EXEMPLES :
            

                T+(?# T MAJUSCULE de 1  N fois)CA               cherche, par exemple, la CHANE 'TCA' ou 'TTTTTCA'
                                                                      
                T+CA(?# T MAJUSCULE de 1  N fois, suivi de CA ) cherche, par exemple, la CHANE 'TCA' ou 'TTTTTCA'
                                                        


            IMPORTANT :
            

                Si l'OPTION (?x) ( Voir PLUS LOIN ) est place en TTE de l'expression RGULIRE :
                                                               

                    - les caractres ESPACE ( \x20 ) sont IGNORS du MOTEUR de recherche
                                                
                    - le PREMIER caractre DISE ( # ) trouv, en DEHORS d'une CLASSE de CARACTRES, et NON IMMDIATEMENT
                                                             
                          PRCD d'un caractre BACKSLASH (\), DBUTE, galement, une ZONE de COMMENTAIRE, et ce
                                                             
                          jusqu' la FIN du GABARIT de recherche
                                     

                          EXEMPLES : L'expression RGULIRE 'T+CA' peut s'crire :
                                                     

                              (?x) T+      (?# T MAJUSCULE de 1  N fois) CA
                              
                              (?x) T+ CA   (?# T MAJUSCULE de 1  N fois suivi de CA)
                              
                              (?x) T+ C A   #   T MAJUSCULE de 1  N fois, suivi de CA
                              


            REMARQUE : L'expression RGULIRE  ac(?#Petit Essai){2,3}b signifie, en fait, ac{2,3}(?#Petit Essai)b,
                                                           
                           soit UNE des DEUX chanes  'accb'  ou  'acccb'
                                                   



 6) GROUPES et RFRENCES :
    

        Les GROUPES reprsentent des expressions RGULIRES, MMORISES par le MOTEUR de RECHERCHE, pouvant tre
                                                    
            RPTES et, VENTUELLEMENT, RUTILISES dans le GABARIT de RECHERCHE
                            


        A) Groupes de CAPTURE NON NOMMS :
                      

               La FORME (.....) reprsente un GROUPE de CAPTURE, NON NOMM :
                                         

                   - qui peut tre RPT, s'il est SUIVI de QUANTIFICATEURS  ( Voir PLUS LOIN )
                                                       
                   - qui constitue un GROUPE de CARACTRES, dont la VALEUR ou le GABARIT sont RUTILISABLES dans
                                                            
                          l'expression RGULIRE de RECHERCHE
                                       


               Un groupe de CAPTURE NON NOMM est IDENTIFI par un NUMRO N, avec 0 < N <= 65535, correspondant au
                                        
                   NUMRO de la Nme PARENTHSE OUVRANTE, NON SUIVIE de la CHANE '?:' ou de la CHANE '?|'
                                                              

                       EXEMPLES :
                       

                           Soit la RegExp La (Dame) (Blanche) et la chane SUJET 'La Dame Blanche est perdue'
                                                               
                               => les groupes de CAPTURE 'Dame' et 'Blanche' sont RESPECTIVEMENT numrots 1 et 2
                                                                                  

                           Soit la RegExp ((chien|chat) (blanc|noir)) et la chane SUJET 'Le petit chat blanc'
                                                               
                               => les groupes 'chat blanc', 'chat' et 'blanc' sont RESPECTIVEMENT numrots 1, 2 et 3
                                                                           

                           Soit la RegExp ((?:chien|chat) (blanc|noir)) et la chane SUJET 'Le petit chat noir'
                                                               
                               => les groupes 'chat noir' et 'noir' sont RESPECTIVEMENT numrots 1 et 2
                                                                       

                           Soit la RegExp (\d\d)-(?:\u\u)-(\l\l) et la chane SUJET '12-AB-cd'
                                                               
                               => les groupes de CAPTURE '12' et 'cd' sont RESPECTIVEMENT numrots 1 et 2
                                                                                  



        B) Groupes de CAPTURE NOMMS :
                      


               La FORME  (?<Nom>.....)  ou  (?'Nom'.....)  reprsente un groupe de CAPTURE NOMM :
                                                         

                   - qui peut tre RPT, s'il est SUIVI de QUANTIFICATEURS  ( Voir PLUS LOIN )
                                                       
                   - qui constitue un GROUPE de CARACTRES, dont la VALEUR ou le GABARIT sont RUTILISABLES dans
                                                            
                          l'expression RGULIRE de RECHERCHE
                                       

                       EXEMPLE :
                       

                           L'expression RGULIRE La (Dame) (Blanche), de l'exemple PRCDENT, peut aussi s'crire
                                                  
                               La (?<Pice>Dame) (?'Couleur'Blanche), dfinissant DEUX groupes de CAPTURE NOMMS :
                                             

                                   Groupe 'Pice'  et  Groupe 'Couleur'
                                                          


                       REMARQUES :
                       

                           Les NOMS de groupes de CAPTURE sont UNIQUEMENT composs de CARACTRES de MOT (\w)
                                                                 

                               TOUS les exemples de NOMS de groupe, ci-dessous, sont, par exemple, VALIDES :
                                                                                           

                                   t_76  ,  Manuvre  ,  Biologie  ,  Son_  ,  gyrine  ,  Lettre__Hameon
                                                            


                           Les NOMS des groupes de CAPTURE NOMMS doivent comporter 32 CARACTRES, au MAXIMUM
                                                                         


                           Le NOMBRE MAXIMUM de groupes de CAPTURE NOMMS est de 10000
                                                    


                           Les NOMS de groupes de CAPTURE sont SENSIBLES  la CASSE :
                                                    

                               EXEMPLE : les groupes (?<Essai>....)  et  (?'essaI') reprsentent 2 groupes DIFFRENTS
                                                                            


                           Si une expression RGULIRE comporte DEUX ou PLUSIEURS NOMS de groupe de CAPTURE IDENTIQUES,
                                                                     
                               SEUL le PREMIER groupe est pris en COMPTE, les SUIVANTS tant IGNORS
                                                      

                                   EXEMPLE : ABC(?'Gr'12)DEF(?'Gr'34)GHI(?'Gr'56)JKL peut se SIMPLIFIER en l'expression
                                               
                                                 RGULIRE suivante :  ABC(?'Gr'12)DEF34GHI56JKL
                                                                



        C) RFRENCES  un groupe de CAPTURE, NON NOMM :
           


               a) Rfrence ARRIRE ABSOLUE :
                  

                      - La FORME  \N                                   avec  0 < N <= 9
                                                                           
                      - la FORME  \gN  ,  \g{N}  , \g<N>  ou  \g'N',   avec  0 < N <= 65535
                                                           
                      - la FORME  \kN  ,  \k{N}  , \k<N>  ou  \k'N',   avec  0 < N <= 65535
                                                           

                            reprsente une RFRENCE ARRIRE, gale au CONTENU ACTUEL du groupe NON NOMM, de numro
                                                                 
                                ABSOLU N, place AVANT, dans l'expression RGULIRE de RECHERCHE
                                                             

                      EXEMPLE :
                      

                          Les REgExp, ci-DESSOUS, recherchent, TOUTES, la chane 'ABC', ENTOURE d'une MME suite,
                                                                               
                              NON NULLE, de CHIFFRES :
                                   

                                  (\d+)ABC\1  ,  (\d+)ABC\g1  ,  (\d+)ABC\k{1}  ,  (\d+)ABC\g<1>  ,  (\d+)ABC\k'1'
                                                      


               b) Rfrence ARRIRE RELATIVE :
                  

                      La FORME  \g-X  ,  \g{-X}  ,  \g<-X>  ou  \g'-X'
                                                
                      La FORME  \k-X  ,  \k{-X}  ,  \k<-X>  ou  \k'-X'
                                                

                          reprsente une RFRENCE ARRIRE, gale au CONTENU ACTUEL du groupe NON NOMM, de numro
                                                               
                              RELATIF X, place AVANT, dans l'expression RGULIRE de RECHERCHE
                                                           


                      NOTE :
                      

                          La NUMROTATION est RELATIVE, avec 1 <= X <= N de groupe MAXIMUM de l'expression RGULIRE
                                                     

                      EXEMPLES :
                      

                          Les RegExp, ci-DESSOUS, recherchent, TOUTES, un MOT, ou PORTION de MOT, formant un
                                                                  
                              PALINDROME de 4 LETTRES :
                                  

                                  (\w)(\w)\g-1\g-2       ,   (\w)(\w)\g{-1}\k{-2}   ,   (\w)(\w)\g-1\k-2
                                                    
                                  (\w)(\w)\k<-1>\g<-2>   ,   (\w)(\w)\k'-1'\k'-2'   ,   (\w)(\w)\g-1\k-2
                                                


                      IMPORTANT : Bien noter, qu'en employant la NUMROTATION ABSOLUE, il faudrait, pour obtenir
                                                        
                                      le MME rsultat, crire, par exemple :
                                         

                                          (\w)(\w)\2\1  ,  (\w)(\w)\g2\g1  ou  (\w)(\w)\g{2}\g{1}
                                                     


               c) Rfrence de GROUPE ABSOLUE :
                  

                      La FORME (?N), avec 0 = N <= 65535, reprsente une RFRENCE de GROUPE, gale au GABARIT du
                                                                  
                          groupe NON NOMM, de numro ABSOLU N, place AVANT ou APRS le GROUPE, dans l'expression
                                                      
                          RGULIRE de RECHERCHE
                                       

                      EXEMPLE :
                      

                          La REgExp (\d+)ABC(?1) cherche la chane 'ABC',  l'INTRIEUR d'une SUITE de CHIFFRES,
                                                               
                              NON NULLE
                              


                      TRS IMPORTANT :
                      

                          Soit, par exemple, le groupe NON NOMM (\d+) et la chane SUJET ACTUELLE '123'. Alors :
                                                                     

                              - la RFRENCE ARRIRE \1 (ou \g{1} ...) vaut EXACTEMENT la chane SUJET ACTUELLE '123'
                                                    
                              - la RFRENCE de GROUPE (?1)            vaut TOUTE chane satisfaisant le GABARIT (\d+)
                                                                     

                          Soit les 9 chanes SUJET ci-DESSOUS :
                                   

                                  1ABC1
                                  12345ABC12345
                                  456ABC456
                                  789ABC789

                                  456ABC789
                                  789ABC456
                                  0ABC123456789
                                  0123456789ABC1
                                  111ABC999

                              - l'expression RGULIRE (\d+)ABC\1   trouve les 4 PREMIRES chanes SUJET, UNIQUEMENT
                                                                     
                              - l'expression RGULIRE (\d+)ABC(?1) trouve les 9 chanes SUJET, indiques ci-DESSUS
                                                                   

                                    =>  L'expression (\d+)ABC(?1) quivaut, en fait,  l'expression (\d+)ABC(\d+)
                                                                                        

                          Soit les 4 chanes SUJET ci-DESSOUS :
                                   

                                  Chat + Chat
                                  Chien + Chien

                                  Chat + Chien
                                  Chien + Chat

                              - l'Exp. RGULIRE (Chat|Chien) \+ \g1   trouve les 2 PREMIRES chanes SUJET, UNIQUEMENT
                                                               
                              - l'Exp. RGULIRE (Chat|Chien) \+ \(?1) trouve les 4 chanes SUJET ci-DESSUS
                                                             


                      REMARQUES :
                      

                          Une RFRENCE de GROUPE ABSOLUE peut tre place DEVANT le groupe auquel elle fait RFRENCE
                                                                  

                                  Aussi, l'expression RGULIRE (\d+)ABC(?1) peut donc s'crire (?1)ABC(\d+)
                                                                                    


                          Une RFRENCE de GROUPE ABSOLUE, place  l'INTRIEUR du groupe, auquel elle fait RFRENCE,
                                                              
                              est une RFRENCE RCURSIVE  ( Voir PLUS LOIN )
                                               


                          Les RFRENCES de GROUPES sont traites comme des groupes ATOMIQUES, MME si le groupe
                                                         
                              auquel elles font RFRENCE, n'est PAS un groupe ATOMIQUE ( Voir PLUS LOIN )
                                                                


               d) Rfrence de GROUPE RELATIVE :
                  

                      La FORME  (?-X)  ou  (?+X)  reprsente une RFRENCE de GROUPE, gale au GABARIT du groupe
                                                                   
                          NON NOMM, de numro RELATIF X, place AVANT ou APRS le GROUPE, dans l'expression RGULIRE
                                                                             
                          de RECHERCHE
                             


                      NOTE : La NUMROTATION est RELATIVE, avec 1 <= X <= N de groupe MAXIMUM de la RegExp
                                   


                      EXEMPLE :
                      

                          La REgExp (\d+)ABC(?-1) cherche une chane 'ABC',  l'INTRIEUR d'une SUITE de CHIFFRES,
                                                                
                              NON NULLE et trouve galement les 9 chanes SUJET ci-dessus
                                                       


                      REMARQUES :
                      

                          Une RFRENCE de GROUPE peut tre place AVANT le groupe auquel elle fait RFRENCE
                                                                  

                              L'exemple PRCDENT, peut aussi s'crire (?+1)ABC(\d+)
                                                                       


                          Les RFRENCES de GROUPES sont traites comme des groupes ATOMIQUES, MME si le groupe
                                                         
                              auquel elles font RFRENCE, n'est PAS un groupe ATOMIQUE ( Voir PLUS LOIN )
                                                                


               e) RFRENCES (?0) ou (?R) :
                  

                          Les RFRENCES de GROUPE (?0) et (?R) ne sont PAS lies  un groupe PARTICULIER mais, en
                                             
                              fait, reprsentent l'ENSEMBLE du GABARIT de RECHERCHE
                                                   

                                  Ce sont donc des RFRENCES RECURSIVES, par DFAUT, au PRCDENT GABARIT de RECHERCHE
                                                              

                              EXEMPLES :
                              

                                   Rappel :  ( Les QUANTIFICATEURS , + ... seront revus  au CHAPITRE 8 ! )
                                                                   

                                   \d+ABC(?0)? cherche TOUTE chane 'ABC', PRCDE de CHIFFRES, et SUIVIE d'un 2ME
                                                             
                                       groupe : CHIFFRES + 'ABC', comme la chane SUJET '123ABC56789ABC'
                                                                     

                                       NOTES :
                                       

                                           (\d+ABC)(?1) est strictement IDENTIQUE  l'expression RGULIRE  \d+ABC(?0)?
                                                                                       

                                           (?0)?\d+ABC entrane le MESSAGE d'ERREUR 'Invalid regular expression'
                                                                    

                                           Bien sr, la FORME  \d+ABC(?0) ne pourra JAMAIS RIEN trouver !
                                                                          


                                    \d+ABC|\((?R)\) cherche TOUTE chane 'ABC', PRCDE de CHIFFRES ou ce MME groupe,
                                                                
                                        CHIFFRES + 'ABC', mis ENTRE PARENTHSES
                                               

                                       NOTES :
                                       

                                           (\d+ABC)|\((?1)\) est IDENTIQUE  l'expression RGULIRE  \d+ABC|\((?R)\)
                                                                           

                                           \((?R)\)|\d+ABC trouve UNIQUEMENT la 2ME ALTERNATIVE, car en DBUT du
                                                                
                                               GABARIT, la RFRENCE (?R) ( TOUT le GABARIT ) n'est PAS ENCORE dfinie
                                                                 


        D) RFRENCES  un groupe de CAPTURE NOMM :
           


               a) Rfrence ARRIRE :
                  

                      La FORME  \g{Nom}  ,  \g<Nom>  ,  \g'Nom'
                                          
                      La FORME  \k{Nom}  ,  \k<Nom>  ou  \k'Nom'
                                           

                          reprsente une RFRENCE ARRIRE, gale au CONTENU ACTUEL du groupe NOMM, de NOM = Nom,
                                                                    
                              place AVANT, dans l'expression RGULIRE de RECHERCHE
                                                         

                      EXEMPLES :
                      

                          Les 12 expressions RGULIRES, ci-DESSOUS, comportant un GROUPE nomm 'Ess', cherchent,
                                                                
                              TOUTES, la chane 'ABC', ENTOURE d'une MME suite, NON NULLE, de CHIFFRES :
                                                     

                                  (?<Ess>\d+)ABC\g{Ess}  ,  (?<Ess>\d+)ABC\g<Ess>  ,  (?<Ess>\d+)ABC\g'Ess'
                                            
                                  (?<Ess>\d+)ABC\k{Ess}  ,  (?<Ess>\d+)ABC\k<Ess>  ,  (?<Ess>\d+)ABC\k'Ess'
                                            
                                  (?'Ess'\d+)ABC\g{Ess}  ,  (?'Ess'\d+)ABC\g<Ess>  ,  (?'Ess'\d+)ABC\g'Ess'
                                            
                                  (?'Ess'\d+)ABC\k{Ess}  ,  (?'Ess'\d+)ABC\k<Ess>  ,  (?'Ess'\d+)ABC\k'Ess'
                                            


                      NOTE : L'utilisation de rfrences ARRIRE, ABSOLUES ou RELATIVES, comme si le GROUPE n'tait
                                                          
                                 PAS NOMM, reste POSSIBLE :
                                 

                                     \N                                    avec  0 < N <= 9
                                                                               
                                     \gN   ,  \g{N}   , \g<N>   ,  \g'N'   avec  0 < N <= 65535
                                                               
                                     \kN   ,  \k{N}   , \k<N>   ,  \k'N'   avec  0 < N <= 65535
                                                               

                                     \g-X  ,  \g{-X}  ,  \g<-X>,  \g'-X'   avec  1 <= X <= n MAXIMUM
                                                           
                                     \k-X  ,  \k{-X}  ,  \k<-X>,  \k'-X'   avec  1 <= X <= n MAXIMUM
                                                           


               b) Rfrence de GROUPE :
                  

                      La FORME  (?&Nom)  ou  (?P>Nom)  reprsente une RFRENCE de GROUPE, gale au GABARIT du groupe
                                                                  
                          NOMM de NOM = Nom, place AVANT ou APRS ce GROUPE, dans l'expression RGULIRE de RECHERCHE
                                                                         

                      EXEMPLES :
                      

                          Les 4 expressions RGULIRES, ci-DESSOUS, comportant un GROUPE nomm 'Ess', cherchent,
                                                                
                              TOUTES, une chane 'ABC',  l'INTRIEUR d'une SUITE de CHIFFRES, NON NULLE
                                           

                                  (?<Ess>\d+)ABC(?&Ess)  ,  (?<Ess>\d+)ABC(?P>Ess)
                                       
                                  (?'Ess'\d+)ABC(?&Ess)  ,  (?'Ess'\d+)ABC(?P>Ess)
                                       


                      NOTE : L'utilisation de rfrences de GROUPE, ABSOLUES ou RELATIVES, comme si le GROUPE n'tait
                                                          
                                 PAS NOMM, reste POSSIBLE :
                                 

                                     (?N)                avec  0 < N <= 65535
                                                           
                                     (?-X)  ou  (?+X)    avec  1 <= X <= n MAXIMUM
                                                    


                      REMARQUES :
                      

                          Une RFRENCE de GROUPE peut tre place AVANT le groupe auquel elle fait RFRENCE
                                                                  

                              Les 4 expressions RGULIRES, ci-DESSUS, peuvent donc aussi s'crire :
                                  

                                  (?&Ess)ABC(?<Ess>\d+)  ,  (?P>Ess)ABC(?<Ess>\d+)
                                       
                                  (?&Ess)ABC(?'Ess'\d+)  ,  (?P>Ess)ABC(?'Ess'\d+)
                                       


                          Une RFRENCE de GROUPE, d'un groupe NOMM, place  l'INTRIEUR du groupe, auquel elle
                                                         
                              fait RFRENCE, est une RFRENCE RCURSIVE  ( Voir PLUS LOIN )
                                                      


                          Les RFRENCES de GROUPES sont traites comme des groupes ATOMIQUES, MME si le groupe
                                                         
                              auquel elles font RFRENCE, n'est PAS un groupe ATOMIQUE ( Voir PLUS LOIN )
                                                                


        E) Groupes NON CAPTURANTS :
                   


               DEUX formes sont possibles :
               

               a) La FORME (?:.....) reprsente un groupe NON CAPTURANT :
                                                 

                      - qui peut tre RPT, s'il est SUIVI de QUANTIFICATEURS  ( Voir PLUS LOIN )
                                                          
                      - qui NE constitue PAS un GROUPE, rutilisable, dans le GABARIT de RECHERCHE
                                          


                      EXEMPLES :
                      

                          \d{3,7}       recherche un NOMBRE ENTIER de 3  7 CHIFFRES quelconques
                                                         
                          (\d){3,7}     recherche un NOMBRE ENTIER de 3  7 CHIFFRES quelconques, dont le
                                                       
                                            DERNIER chiffre, CAPTUR, est RUTILISABLE
                                                            

                          (\d){3,7},\1  recherche un NOMBRE DCIMAL avec :
                                                
                                            - une partie ENTIRE de 3  7 CHIFFRES quelconques
                                                         
                                            - une partie DCIMALE de 1 CHIFFRE, gale au CHIFFRE des UNITS
                                                                     

                          (?:\d){3,7}\1  Le groupe NON CAPTURANT (?:\d) => ERREUR car AUCUN groupe de CAPTURE n 1
                                                      


                      NOTES : Si 1 ou PLUSIEURS OPTION(S) sont indiques au DBUT d'un groupe NON CAPTURANT
                                                             
                                  DEUX syntaxes sont possibles :
                                  

                                      (?:(?i).....)   ou   (?i:......)
                                              

                                      ( Les OPTIONS et QUANTIFICATEURS seront vus PLUS LOIN )
                                                            


               b) La FORME (?|.....) reprsente un groupe NON CAPTURANT d'ALTERNATIVES :
                                                    

                      - qui peut tre RPT, s'il est SUIVI de QUANTIFICATEURS  ( Voir PLUS LOIN )
                                                          
                      - qui NE constitue PAS un GROUPE, rutilisable, dans le GABARIT de RECHERCHE
                                          
                      - qui RINITIALISE le COMPTAGE des GROUPES de CAPTURE INTERNES, pour CHAQUE ALTERNATIVE trouve
                                       

                      EXEMPLES :
                      

                          - Soit l'expression RGULIRE  (a)(?|x(y)z|(p(q)r)|(t)u(v))(w) qui cherche UNE des TROIS
                                                                      
                                chanes 'axyzw', 'apqrw' ou 'atuvw'
                                                   

                                    La FORME (?|.....) implique la NUMROTATION des groupes de CAPTURE suivante :
                                                               

                                                                  n 1 : Groupe (a)
                                                                                

                                        n 2 : Groupe (y)         n 2 : Groupe (p(q)r)       n  2 : Groupe (t)
                                                                                                   
                                        n 3 : NON dfini         n 3 : Groupe  (q)          n  3 : Groupe (v)
                                                                                                

                                                                  n 4 : Groupe (w)
                                                                                


                          - Soit l'expression RGULIRE, (a)(x(y)z|(p(q)r)|(t)u(v))(w), recherchant UNE de ces TROIS
                                                                       
                                MMES chanes
                                

                                    Avec le groupe de CAPTURE (......), la NUMROTATION, de ces MMES groupes, devient :
                                                                    

                                                                  n 1 : Groupe (a)
                                                                                

                                        n 2 : Groupe x(y)z       n 2 : Groupe (p(q)r)       n  2 : Groupe (t)u(v)
                                                                                                 
                                        n 3 : Groupe (y)         n 4 : Groupe (p(q)r)       n  6 : Groupe (t)
                                                                                                   
                                                                  n 5 : Groupe (q)           n  7 : Groupe (v)
                                                                                                          

                                                                  n 8 : Groupe (w)
                                                                                


        F) ANNEXES sur les GROUPES :
           


               Du fait des MULTIPLES syntaxes QUIVALENTES concernant les GROUPES et les RFRENCES  ces GROUPES,
                                                   
                   il est utile de DFINIR une syntaxe UNIQUE et MINIMALE, couvrant la MAJORIT des CAS :
                                                              

                       ==========================================================================================
                       |          GROUPE           |          RFRENCE          |   de N ABSOLU  |  de N RELATIF  |
                       |                     |                    |           |          |
                       ==========================================================================================
                       |                           |                             |                 |                 |
                       |  (?:.....) NON CAPTURANT  |           AUCUNE            |     xxxxxxx     |     xxxxxxx     |
                       |              |                             |                 |                 |
                       |                           |                             |                 |                 |
                       |  (?|.....) NON CAPTURANT  |           AUCUNE            |     xxxxxxx     |     xxxxxxx     |
                       |              |                             |                 |                 |
                       ------------------------------------------------------------------------------------------
                       |                           |                             |                 |                 |
                       |                           |  ARRIRE    de MME Valeur  |  \N   ou   \gN  |      \g-X       |
                       |  (.....)       NON NOMM  |                         |                 |                 |
                       |                  |  de GROUPE  de MME Gabarit |      (?N)       |      (?X)      |
                       |                           |                         |                 |                 |
                       ------------------------------------------------------------------------------------------
                       |                           |                             |                 |                 |
                       |                           |  ARRIRE    de MME Valeur  |     \g<Nom>     |     xxxxxxx     |
                       |  (?<Nom>.....)     NOMM  |                         |                 |                 |
                       |                      |  de GROUPE  de MME Gabarit |     (?&Nom)     |     xxxxxxx     |
                       |                           |                         |                 |                 |
                       ==========================================================================================



               Les groupes NOMMS ou NON NOMMS ne sont PAS RECONNUS  l'INTRIEUR d'une LISTE entre CROCHETS !
                                                    

                   EXEMPLE :
                   

                       [abc(?<Guy>0+)] ne signifie PAS une LETTRE MINUSCULE a, b ou c, SUIVIE d'une SUITE, NON NULLE de
                                                                
                           de CHIFFRES 0, correspondant au GROUPE 'Guy'
                                                 

                               MAIS reprsente un caractre UNIQUE de la LISTE [()+0<>?Gabcuy], mise dans l'ordre ASCII
                                                                    


               Les RFRENCES, ARRIRE ou de GROUPE, ne sont PAS RECONNUES  l'INTRIEUR d'une LISTE entre CROCHETS !
                                           

                   EXEMPLE :
                   

                       (?<Nb>\d+)[\g<Nb>abc(?+1)] (\u*) signifie, en fait, un NOMBRE, SUIVI d'un caractre UNIQUE de
                                                                
                           la LISTE [()+1<>?Nabcg], dans l'ordre ASCII, SUIVI d'une ESPACE et TERMIN par une SUITE,
                                                      
                           MME NULLE, de LETTRES MAJUSCULES
                                


               IMPORTANT :
               

                   Les GROUPES de CAPTURE, NOMMS ou NON NOMMS, sont NUMROTS, par le MOTEUR de RECHERCHE, dans
                                                    
                       leur ORDRE d'APPARITION dans le GABARIT de la RECHERCHE :
                                     

                           Dans l'expression RGULIRE (\d+)(?<Guy>Le)(\s+)(?'Thevenot'MEILLEUR)(, bien sr !+), satis-
                                                       
                               faisant la chane SUJET '12345Le          MEILLEUR, bien sr !!!', on a, par EXEMPLE :
                                                                     

                                   Groupe NON NOMM                n 1   =   '12345'
                                   Groupe NOMM      'Guy'         n 2   =   'Le'
                                   Groupe NON NOMM                n 3   =   '          '  ( 10 ESPACES )
                                   Groupe NOMM      'Thevenot'    n 4   =   'MEILLEUR'
                                   Groupe NON NOMM                n 5   =   ', bien sr !!!'



                   TOUTE RFRENCE ARRIRE  un groupe de CAPTURE :
                                   

                       - NOMM,     avec un nom NON DFINI
                                           
                       - NON NOMM, avec un n SUPRIEUR au MAXIMUM ou NON VALABLE
                                       

                           entrane, AUTOMATIQUEMENT le message d'ERREUR  ' Invalid regular expression '
                                                             

                       EXEMPLES :
                       

                           (?<Toto>\d+)ABC\g<Titi>DEF(?&Tata)GHI => KO car les groupes 'Titi' et 'Tata' n'existent PAS
                                                                                                         
                           ABC(\d+)DEF\2GHI\g-3JKL               => KO car les groupes 2 et -3 n'existent PAS
                                                                                                 



                   TOUTE RFRENCE ARRIRE situe  l'INTRIEUR du groupe, NOMM ou NON, auquel elle fait RFRENCE,
                                                              
                       entrane, AUTOMATIQUEMENT le message d'ERREUR  ' Invalid regular expression '
                                                         

                       EXEMPLES :
                       

                           ABC(?'Toto'DEF\g'Toto'GHI)JKL  =>  KO car \g'Toto'  l'INTRIEUR du GROUPE 'Toto'
                                             
                           ABC(\d+\1)DEF                  =>  KO car \1        l'INTRIEUR du 1er GROUPE de PARENTHSES
                                                                   



                   Dans QUELQUES cas, les SYNTAXES, indiques dans le TABLEAU ci-dessus, ne pourront PAS tre utilises
                                                                         

                       EXEMPLE :
                       

                           Soit un GABARIT (\d+)ABC\g1  trouver, qui DOIT tre SUIVI de la CHANE '23'
                                                                          

                               La syntaxe SIMPLE (\d+)ABC\g123  => Message d'ERREUR  ' Invalid regular expression '
                                                             

                           DEUX solutions sont possibles :
                           

                               - (\d+)ABC\g{1}23  ( On ISOLE le NUMRO de la RFRENCE ARRIRE )
                                               

                               - (\d+)ABC\g1[2]3  ( On ISOLE le 1ER CHIFFRE, situ APRS la RFRENCE ARRIRE )
                                                



                   Le NOMBRE de caractres CONTENUS dans un GROUPE, NOMM ou NON NOMM, est d'environ 30000
                                               

                       NOTE :
                       

                           En fait, aprs de NOMBREUX essais :
                                             

                               - j'ai russi  faire "tenir" 4258000 caractres dans une RFRENCE ARRIRE \1 :
                                                                                  
                                     par la RECHERCHE de (.*), avec l'OPTION  " . comprend ligne nouvelle "
                                                                            
                                     par le REMPLACEMENT \1Guy !
                                                         

                               - j'ai russi  slectionner PLUS de 1 MILLION de lettres MINUSCULES 'a' avec a{1048570} !
                                                                   

                               - j'ai russi  crer un groupe NOMM, dont le NOM faisait 1015 caractres !
                                                                              


                                   => On en dduit que le MOTEUR de recherche OPTIMISE l'utilisation de la MMOIRE,
                                                                        
                                          en MODIFIANT, de manire DYNAMIQUE, les LIMITES des divers PARAMTRES :
                                                                            

                                              - Nombre MAXIMUM de RPTITIONS d'un CARACTRE ou d'un GROUPE
                                                                  
                                              - Nombre MAXIMUM de CARACTRES dans un GROUPE
                                                                  
                                              - Nombre MAXIMUM de GROUPES, NOMMS et NON NOMMS
                                                                  
                                              - Nombre MAXIMUM de CARACTRES dans le NOM d'un GROUPE
                                                                  
                                              - Nombre MAXIMUM de RFRENCES ARRIRE ou de GROUPE
                                                                      

                                          Dans la PLUPART des cas, ces limites THORIQUES ne seront JAMAIS atteintes !
                                                                           


               REMARQUES :
               

                   La valeur CAPTURE par une RFRENCE ARRIRE, ABSOLUE ou RELATIVE,  un GROUPE de CAPTURE RPT,
                                                         
                       correspond TOUJOURS  l'occurrence FINALE, satisfaisant le GABARIT du groupe qui est RPT
                                                                       

                           EXEMPLE :
                           

                               Soit l'expression RGULIRE (abc\d{3} *)+ => \\1 = \1
                                                           

                                   Cette RegExp satisfait la chane SUJET 'abc576 abc000 abc999 abc852 => \1 = 'abc852'
                                                                

                                       car la RFRENCE ARRIRE \1  reprsente, UNIQUEMENT, la CHANE 'abc852,
                                                                         

                                           et NON, l'UNE des chanes PRCDENTES  'abc576 ' , 'abc000 '  ou  'abc999 '
                                                                                    



                   La valeur CAPTURE d'un GROUPE peut tre GALE  :
                                  

                       - la chane VIDE, si ce GROUPE n'a PAS ENCORE t DFINI
                                               

                       -  la VALEUR d'une PRCDENTE occurrence, si la DERNIRE occurrence ne fait PAS APPEL  ce GROUPE
                                                          

                           EXEMPLE :
                           

                               Si l'expression RGULIRE recherche est (a|(b))+ , alors :
                                                               

                                   \1 = 'a'   et   \2 = ''    si la chane SUJET est  'aaaa'
                                                                   
                                   \1 = 'a'   et   \2 = 'b'   si la chane SUJET est  'abaa'
                                                                   
                                   \1 = 'b'   et   \2 = 'b'   si la chane SUJET est  'aaab'
                                                                   



                   L'expression RGULIRE (a|(bc))\2 trouve la CHANE 'bcbc', mais PAS la CHANE 'abc'
                                                                                 

                       En effet, en prenant la PREMIRE alternative, la RFRENCE ARRIRE \2 n'est PAS ENCORE dfinie
                                                                     
                           ( BIEN que, dans le 2ME cas, la RFRENCE ARRIRE \1 soit DFINIE et GALE  la CHANE 'a' )
                                                                                 



                   DIFFRENCES entre une RFRENCE ARRIRE ou de GROUPE :
                              

                       -  un groupe OPTIONNEL entier,                         tels que  a(\d*)\1b  ou  C((a|b)*)(?1)D
                                                                               
                       - au SOUS-ensemble NON OPTIONNEL d'un groupe OPTIONNEL, tels que  a(\d)*\1b  ou  C(a|b)*(?1)D
                                                                         


                           QUAND il n'y a PAS de CHIFFRES entre les lettres MINUSCULES 'a' et 'b' ou PAS de LETTRES
                                                            
                               'a' et 'b', entre les Lettres MAJUSCULES 'C' et 'D' :
                                                   

                                    - dans le 1ER cas, le GROUPE (\d*) ou ((a|b)*), tant OPTIONNEL, correspond  la
                                                                          
                                          chane VIDE, ainsi que les RFRENCES \1 ou (?1)
                                                                                

                                              =>  les CHANES 'ab' et 'CD' sont bien TROUVES
                                                                                 

                                    - dans le 2ME cas, le GROUPE \1 = (\d) ou (?1) ~ (a|b) n'est PAS DFINI, car AUCUN
                                                                               
                                          CHIFFRE n'existe dans la CHANE 'ab ' et AUCUNE lettre 'a' ou 'b' dans 'CD'
                                                                                  
                                              =>  les CHANES 'ab' et 'CD' NE sont donc PAS trouves
                                                                       



                   (q?)b\1 cherche UNE des DEUX chanes SUJET 'qbq' ou 'b', car si AUCUNE lettre q, les expressions
                                                            
                       q? et \1 reprsentent une chane VIDE
                                             


                   (q)?b\1 ne trouve QUE la chane 'qbq' et NON les chanes SUJET 'bq' ou 'b' car, dans ces DEUX
                                                                                         
                       dernires, la RFRENCE ARRIRE \1 concerne un GROUPE (q) NON ENCORE trouv
                                                            

                           => chec GLOBAL de l'expression RGULIRE
                              


                   (a|(bc))\1 cherche UNE des DEUX chanes SUJET 'aa' ou 'bcbc' car \1 reprsente l'UN ou l'AUTRE
                                                                      
                       des DEUX cas de l'ALTERNATIVE
                                     


                   (a|(bc))\2 ne trouve QUE la chane 'bcbc' et NON la lettre UNIQUE 'a', car la RFRENCE
                                                                    
                       ARRIRE \2 n'est PAS DFINIE lorsque la partie GAUCHE ( lettre MINUSCULE a )de l'ALTERNATIVE
                                                                  
                       est concerne !


                   (\d)(\g{1})(?1) trouve DEUX chiffres IDENTIQUES, suivi d'un TROISIME chiffre QUELCONQUE, car la
                                                           
                        RFRENCE de groupe (?1) reprsente le PREMIER groupe \d
                                               


                   (\d)(\g{1})(?2) trouve TROIS chiffres IDENTIQUES, car la RFRENCE de groupe (?2) reprsente la
                                              
                        RFRENCE ARRIRE \g{1} au PREMIER groupe \d
                                    


                   (\d)((?1))(?1) trouve TROIS chiffres QUELCONQUES, car la RFRENCE de groupe (?1) reprsente le
                                              
                       PREMIER groupe \d
                               


                   (\d)((?1))(?2) trouve TROIS chiffres QUELCONQUES, car la RFRENCE de groupe (?2) reprsente la
                                              
                       RFRENCE de groupe (?1), qui reprsente, ELLE-MME, un chiffre QUELCONQUE \d !
                                                      




               Exemple RCAPITULATIF :
               


                   La RegExp  AB(?&Ess)CD(?1)EF(?+2)GH(\d+)IJ\1KL(?:MNO)PQ(?<Ess>[a-z]+)RS\g-2TU(?-1)VW\g'Ess'XYZ
                              

                       trouve, par exemple, les TROIS lignes ci-dessous :
                                                

                           ABceciCD12345EFestGH789IJ789KLMNOPQunRS789TUtoutVWunXYZ

                           ABpetitCD000999EFessaiGH123IJ123KLMNOPQdeRS123TUtexteVWdeXYZ

                           ABpourCD11111EFvoirGH110011IJ110011KLMNOPQcelaRS110011TUabcdefghVWcelaXYZ



                   Pour une MEILLEURE comprhension, les diffrents GROUPES, RFRENCES et BLOCS de TEXTE, de
                                                                 
                       l'expression RGULIRE et des 3 chanes SUJET, ont t disposs en COLONNES, dans le TABLEAU
                                                                             
                       ci-DESSOUS, et dans lequel :


                           - les GROUPES NON CAPTURANTS sont SOULIGNS,  avec le signe GAL
                                                                
                           - les GROUPES de CAPTURE     sont SOULIGNS,  avec le signe TRAIT HAUT
                                                                       
                           - les RFRENCES ARRIRE     sont SOULIGNES, avec le signe POINTILL
                                                                       
                           - les RFRENCES de GROUPES  sont SOULIGNES, avec le signe CHAPEAU
                                                                    
                       et

                           - Gn  signifie le Nme GROUPE, NOMM ou NON, de L'expression RGULIRE
                                             
                           - An  signifie la RFRENCE ARRIRE   gale  la VALEUR ACTUELLE du GROUPE n
                                                             
                           - Rn  signifie la RFRENCE de GROUPE gale au   GABARIT         du GROUPE n
                                                                   


  --------------------------------------------------------------------------------------------------------------------
  |AB|(?&Ess)|CD| (?1) |EF|(?+2)|GH|(\d+) |IJ|  \1  |KL|(?:MNO)|PQ|(?<Ess>[a-z]+)|RS|\g-2  |TU| (?-1)  |VW|\g'Ess'|XYZ |
  |  |       |  |      |  |     |  | |  |      |  |=======|  ||  |      |  |        |  |       |    |
  |  |  R2   |  |  R1  |  | R2  |  |  G1  |  |  A1  |  |       |  |      G2      |  |  A1  |  |   R2   |  |  A2   |    |
  --------------------------------------------------------------------------------------------------------------------

  --------------------------------------------------------------------------------------------------------------------
  |AB| ceci  |CD|12345 |EF| est |GH| 789  |IJ| 789  |KL|  MNO  |PQ|      un      |RS| 789  |TU| tout   |VW|  un   |XYZ |
  |  | ^^^^  |  |^^^^^ |  | ^^^ |  |   |  |   |  |  ===  |  |            |  |   |  | ^^^^   |  |     |    |
  |  |  R2   |  |  R1  |  | R2  |  |  G1  |  |  A1  |  |       |  |      G2      |  |  A1  |  |   R2   |  |  A2   |    |
  ------------------------------------------------------------------------------------------------
  |AB| petit |CD|000999|EF|essai|GH| 123  |IJ| 123  |KL|  MNO  |PQ|      de      |RS| 123  |TU| texte  |VW|  de   |XYZ |
  |  | ^^^^  |  |^^^^^^|  |^^^^^|  |   |  |   |  |  ===  |  |            |  |   |  | ^^^^^  |  |     |    |
  |  |  R2   |  |  R1  |  | R2  |  |  G1  |  |  A1  |  |       |  |      G2      |  |  A1  |  |   R2   |  |  A2   |    |
  ------------------------------------------------------------------------------------------------
  |AB| pour  |CD|11111 |EF|voir |GH|110011|IJ|110011|KL|  MNO  |PQ|     cela     |RS|110011|TU|abcdefgh|VW| cela  |XYZ |
  |  | ^^^^  |  |^^^^^ |  |^^^^ |  ||  ||  |  ===  |  |          |  ||  |^^^^^^^^|  |   |    |
  |  |  R2   |  |  R1  |  | R2  |  |  G1  |  |  A1  |  |       |  |      G2      |  |  A1  |  |   R2   |  |  A2   |    |
  --------------------------------------------------------------------------------------------------------------------


        G) RFRENCES RCURSIVES :
           

               TOUTE RFRENCE de GROUPE (?N), avec N > 0, situe  l'INTRIEUR du groupe, NOMM ou NON, auquel elle
                                               
                   fait RFRENCE, est considre comme une RFRENCE RCURSIVE au GABARIT de ce GROUPE
                                                       

                   EXEMPLES : ( Voir QUANTIFICATEURS, ci-APRS )
                             

                       (\d(?1)*) quivaut  l'expression RGULIRE (\d)(?1)* , soit  la RegExp \d{1,}  ou  \d+
                                                                          

                       (\d(?1)+) quivaut  l'expression RGULIRE (\d)(?1)+ , soit  la RegExp \d{2,}
                                                                    

                       (\d(?1)?) quivaut  l'expression RGULIRE (\d)(?1)? , soit  la RegExp \d{1,2}
                                                             

                       NOTE :
                       

                           BIZARREMENT, les 3 FORMES  (\d*(?1))  ,  (\d+(?1))  et  (\d?(?1))  quivalent  la
                                                                 
                               SLECTION de TOUT le FICHIER, MME s'il contient des caractres NON CHIFFRES ?!
                                                                          



               La RFRENCE particulire,  TOUT le GABARIT de RECHERCHE, (?R) ou (?0), est TOUJOURS, par
                                                            
                   DFINITION mme, une RFRENCE RCURSIVE au gabarit ENTIER
                              



               Les RFRENCES RCURSIVES au groupe N (?N) ou  TOUT le GABARIT  (?R) et (?0) sont considres comme
                                    
                   des groupes ATOMIQUES par DFAUT, c'est  dire qu'AUCUN BACKTRACKING n'aura lieu pour obtenir une
                                                 
                   CONCORDANCE de l'expression RGULIRE globale, mme si d'autres ALTERNATIVES n'ont PAS t testes !
                                                              


 7) OPTIONS :
    

        Le MOTEUR de RECHERCHE d'expression RGULIRES PCRE de Notepad++ possde 4 OPTIONS internes :
                                 


        A) l'OPTION i  et  l'OPTION -i, son CONTRAIRE :
                           

               Quand l'OPTION i est utilise, la RECHERCHE des LETTRES se fait SANS respect de la CASSE
                                                                

               Quand l'OPTION -i est utilise, la RECHERCHE des LETTRES se fait AVEC respect de la CASSE
                                                                

               Quand AUCUNE des 2 OPTIONS i et -i n'est PRSENTE, la RECHERCHE des LETTRES se fait :
                                               

                   - SANS RESPECT de la CASSE si la CASE " Respecter la casse " est DCOCHE
                                          
                   - AVEC RESPECT de la CASSE si la CASE " Respecter la casse " est COCHE
                                          



        B) l'OPTION m  et  l'OPTION -m, son CONTRAIRE :
                           

               Quand l'OPTION m est utilise  OU  qu'AUCUNE des 2 OPTIONS m et -m  n'est PRSENTE :
                                                   

                   - L'ANCRE ^ reprsente la POSITION  :
                                      

                         - ENTRE le TOUT DBUT du fichier COURANT et le PREMIER caractre du fichier
                                                      
                         - ENTRE un caractre 'FIN de LIGNE'      et le PREMIER caractre de la ligne SUIVANTE
                                                                    


                   - L'ANCRE $ reprsente la POSITION :
                                      

                         - ENTRE le DERNIER caractre d'une LIGNE et un caractre 'FIN de LIGNE'
                                                              
                         - ENTRE le DERNIER caractre du fichier  et la TOUTE FIN du fichier COURANT
                                                        


               Quand l'OPTION (?-m) est utilise :
                       

                   - l'ANCRE ^  reprsente la POSITION entre le TOUT DBUT du fichier et le PREMIER caractre, UNIQUEMENT
                                                                                       
                   - l'ANCRE $  reprsente la POSITION entre le DERNIER caractre et la TOUTE FIN  du fichier, UNIQUEMENT
                                                                                        



        C) l'OPTION s  et  l'OPTION -s, son CONTRAIRE :
                           

               Quand l'OPTION -s est utilise :
                       

                   - Le JOKER . reprsente TOUT caractre UNIQUE, AUTRE que les TROIS caractres :
                                      
                         \n ( \x0A ) , \f ( \x0C ) et \r ( \x0D )
                                

               Quand l'OPTION s est utilise :
                       

                   - Le JOKER . reprsente TOUT caractre UNIQUE, y COMPRIS l'UN des TROIS caractres :
                                      
                         \n ( \x0A ) , \f ( \x0C ) ou \r ( \x0D )
                                

               Quand AUCUNE des 2 OPTIONS s et -s n'est PRSENTE, le JOKER . reprsente  :
                                 

                   - TOUT caractre UNIQUE, AUTRE que \n, \f et \n , si la CASE " . comprend ligne nouvelle " est DCOCHE
                                                   
                   - TOUT caractre UNIQUE, y COMPRIS \n, \f et \n , si la CASE " . comprend ligne nouvelle " est COCHE
                                                



        D) l'OPTION x  et  l'OPTION -x, son CONTRAIRE :
                           

               Quand l'OPTION -x est utilise  OU  qu'AUCUNE des 2 OPTIONS x et -x n'est PRSENTE :
                                                  

                   - Le caractre ESPACE ( \x20 ) est un caractre SIGNIFICATIF de l'expression RGULIRE
                                                    

               Quand l'OPTION x est utilise :
                       

                   - Le caractre ESPACE ( \x20 ) est un caractre NON SIGNIFICATIF et IGNOR de l'expression RGULIRE
                                                        


                  NOTE : Si le caractre ESPACE est PRCD d'un ANTISLASH \ ou plac entre CROCHETS [], il est
                                              
                              rendu, de nouveau, SIGNIFICATIF
                                                 



        E) PARTICULARITS dans NOTEPAD++ :
           

            - les OPTIONS i et -i sont PRIORITAIRES sur le MARQUAGE, ou NON, de la CASE " Respecter la casse "
                                                       

            - les OPTIONS s et -s sont PRIORITAIRES sur le MARQUAGE, ou NON, de la CASE " . comprend ligne nouvelle "
                                                       

            - l'OPTION m est ACTIVE, par DFAUT       =>  Utiliser l 'OPTION -m, si ncessaire pour la RegExp
                                                                            

            - l'OPTION x n'est PAS ACTIVE par DFAUT  =>  Utiliser l'OPTION x,   si ncessaire pour la RegExp
                                                                         



        F) DFINITION de l'OBJET <Bloc> :
           

               <Bloc> = <Options>|-<Options>|<Options>-<Options>   avec   <Options> = [imsx]+
                            

               EXEMPLES de <Bloc> :
                           

                   i        Option i ACTIVE
                                   
                   -m       Option m DSACTIVE
                                   
                   ix       Options i et x ACTIVES
                                    
                   i-m      Option i ACTIVE et option m DSACTIVE
                                              
                   sx-mi    Options s et x ACTIVES et options m et i DSACTIVES
                                                



        G) SYNTAXE des OPTIONS :
           

               TROIS formes sont possibles :
               

               a) La FORME (?<Bloc>) :
                           

                      Les OPTIONS, dans <Bloc>, sont ACTIVES ou INACTIVES :
                                              

                          - jusqu'au PROCHAIN bloc d'OPTIONS rencontr
                                     
                          - jusqu' la FIN de l'expression RGULIRE, si PAS d'AUTRE bloc d'OPTIONS
                                            


                      EXEMPLES : ( avec CASES " Respecter la casse " COCHE et " . comprend ligne nouvelle " DCOCHE )
                                                    

                          a(?i)bc             cherche UNE des 4 CHANES  'abc'  ,  'aBc'  ,  'abC'  ou  'aBC'
                                                                                
                          a(?i)b|c            cherche UNE des 4 CHANES  'ab'  ,  'AB'  ,  'c'  ou  'C'
                                                                               

                          ABC(?i)DEF(?-i)GHI  cherche 'ABC' suivi de 'DEF', QUELLE que SOIT la CASSE, suivi de 'GHI'
                                                                

                          ABC(?i)DEFGHI       cherche la CHANE 'ABC' suivi de 'DEFGHI', QUELLE que SOIT la CASSE
                                                                   

                          ABC(?x-i) d E f G   cherche la chane EXACTE 'ABCdEfG'
                                               

                          (?s-i) AbC.*dEf     cherche la PLUS LONGUE chane, dbutant par 'AbC', EXACTEMENT et
                                                      
                                                  finissant par 'dEf', EXACTEMENT, MME rpartie sur PLUSIEURS lignes
                                                                     


                      NOTE :   Les FORMES (?i), (?s), (?m) et (?x) NE constituent PAS des groupes de CAPTURE, en soi !
                                                       


               b) La FORME ((?<Bloc>)....) :
                           

                      Les OPTIONS, dans <Bloc>, sont ACTIVES ou INACTIVES dans ce SEUL groupe de CAPTURE, UNIQUEMENT
                                                                    


                      EXEMPLES : ( Cases " Respecter la casse " COCHE et " . comprend ligne nouvelle " DCOCHE )
                                               

                          (a(?i)b)c           cherche UNE des 2 CHANES  'abc'  ou  'aBc'
                                                                

                          ((?-i)aBc) \1        cherche la chane EXACTE 'aBc', SUIVIE d'un 2ME groupe de ces 3 MMES
                                                                      
                                                   lettres, SPAR par une ESPACE, soit la CHANE 'aBc aBc'
                                                                              


                          ((?-i)aBc) (?i)\1    cherche la chane EXACTE 'aBc', SUIVIE d'un 2ME groupe de ces 3 MMES
                                                                  
                                                   lettres, QUELLE que SOIT leur CASSE, SPAR par une ESPACE :
                                                              

                                                   'aBc abc'  ,  'aBc aBc'  ,  'aBc abC'  ,  'aBc aBC'
                                                                         
                                                   'aBc Abc'  ,  'aBc ABc'  ,  'aBc AbC'  ,  'aBc ABC'
                                                                         


                          ((?i)abc) \1         cherche 1 CHANE 'abc', de casse QUELCONQUE, RPTE, avec 1 ESPACE entre
                                                                   

                                                   'abc abc'  ,  'aBc aBc'  ,  'abC abC'  ,  'aBC aBC'
                                                                         
                                                   'Abc Abc'  ,  'ABc ABc'  ,  'AbC AbC'  ,  'ABC ABC'
                                                                         


                          ((?i)abc) (?1)       cherche DEUX chanes 'abc', de casse QUELCONQUE, spares d'une ESPACE
                                                                      
                                                   telles que  'abc abc'  ,  'ABC ABC'  ,  'ABC abc'  ou  'AbC aBc'
                                                                                      


                          ((?-i)abc) (?i)(?1)  cherche la chane EXACTE 'abc', SPARE de cette MME chane, par une
                                                           
                                                  ESPACE , soit la SEULE chane 'abc abc'
                                                                      


                          ((?i)[[:upper:]])\1  cherche une LETTRE quelconque, MINUSCULE ou MAJUSCULE, DOUBLE
                                                


               c) Les FORMES (?:(?<Bloc>)....)  ou la forme SIMPLIFIE  (?<Bloc>):....) :
                                             

                      Les OPTIONS dans <Bloc> sont ACTIVES ou INACTIVES dans ce SEUL groupe NON CAPTURANT, UNIQUEMENT
                                                               


                      EXEMPLES : ( Cases " Respecter la casse " COCHE et " . comprend ligne nouvelle " DCOCHE )
                                               

                          (?-m:^ABC.....XYZ$)   cherche un FICHIER, d'une SEULE ligne, avec les 26 LETTRES de l'ALPHABET
                                                                  

                          T(?i:es)t             cherche UNE des QUATRE chanes  'Test'  ,  'TeSt'  ,  'TEst'  ou  'TESt'
                                                                                

                          12(?x: \l \u \ u)3 4  cherche la CHANE '12' + 1 MINUSCULE + 1 MAJUSCULE + la CHANE ' u3 4'
                                                                       

                          (?i:)ABC              cherche la chane EXACTE 'ABC', car le groupe (?i:) reprsente, en fait,
                                                                           
                                                    un groupe NON CAPTURANT VIDE, et l'OPTION (?i) s'applique  ce
                                                                     
                                                    SEUL groupe et NON  la FIN de la RegExp, soit 'ABC'
                                                                                    



        REMARQUES :
        

            Les OPTIONS sont sensibles  la CASSE  => Les FORMES (?I), (?M), (?M) ou (?X) provoquent une ERREUR !
                                                      


            Les OPTIONS, prises en compte par les RFRENCES ARRIRE, sont celles EXISTANTES au MOMENT de l'APPEL
                                                             
                effectif  ces GROUPES de CAPTURE, par une RFRENCE ARRIRE
                                         


            Les OPTIONS, prises en compte par les RFRENCES de GROUPE, sont celles EXISTANTES au MOMENT de la
                                                         
                DFINITION de ces GROUPES de CAPTURE ( et NON au MOMENT de leur UTILISATION, avec la FORME (?.) )
                                                     


                EXEMPLE : ( Case " Respecter la casse " COCHE )
                               

                    Le GABARIT ([ab][ab])(?i)\1 trouve les 16 chanes :
                                           

                        'aaaa'   ,   'abab'   ,   'baba'   ,   'bbbb'
                        'aaaA'   ,   'abaB'   ,   'babA'   ,   'bbbB'
                        'aaAa'   ,   'abAb'   ,   'baBa'   ,   'bbBb'
                        'aaAA'   ,   'abAB'   ,   'baBA'   ,   'bbBB'


                            =>  \1 = VALEUR du Groupe 1 = les 2 PREMIERS car. EXACTEMENT, QUELLE que SOIT leur CASSE
                                                   

                            =>  l'OPTION (?i) est EFFECTIVE, car relative  la VALEUR de la RFRENCE ARRIRE au Groupe 1
                                                                


                    Le GABARIT ([ab][ab])(?i)(?1) trouve les 16 chanes :
                                            

                        'aaaa'   ,   'abaa'   ,   'baaa'   ,   'bbaa'
                        'aaab'   ,   'abab'   ,   'baab'   ,   'bbab'
                        'aaba'   ,   'abba'   ,   'baba'   ,   'bbba'
                        'aabb'   ,   'abbb'   ,   'babb'   ,   'bbbb'


                            =>  (?1) = GABARIT du Groupe 1 = [ab][ab] avec la SEULE casse MINUSCULE, MALGR l'OPTION (?i)
                                                  

                            =>  l'OPTION (?i) est SANS effet, car NON EXISTANTE, au moment de la DFINITION du Groupe 1
                                                               



            QUAND la CASE " Respecter la casse " n'est PAS COCHE, la RegExp ((?-i)aBc) \1 , ci-AVANT, cherche :
                                                       

                - la chane EXACTE 'aBc' car l'OPTION (?-i) est PRIORITAIRE sur l'TAT de la CASE " Respecter la casse "
                                                              
                - le caractre ESPACE
                               
                - la MME chane 'aBc', QUELLE que SOIT sa CASSE, car la CASE " Respecter la casse " est DCOCHE
                                                        

                      => les 8 CHANES ci-DESSOUS, sont trouves
                             

                             'aBc abc'  ,  'aBc abC'  ,  'aBc aBc'  ou  'aBc aBC'
                                                    
                             'aBc Abc'  ,  'aBc AbC'  ,  'aBc ABc'  ou  'aBc ABC'
                                                    


            SI la CASE " Respecter la casse " est COCHE, alors :
                              

                - la FORME  Samedi|Dimanche cherche l'UNE des DEUX chanes 'Samedi' ou 'Dimanche'
                                                       

                - les 4 FORMES  (?i)Samedi|Dimanche  ,  (?i)(Samedi|Dimanche)  ,  (?i:Samedi|Dimanche)  ou
                                         
                      (?:(?i)Samedi|Dimanche) cherchent l'UN des MOTS 'Samedi' ou 'Dimanche', QUELLE que SOIT leur CASSE
                                                    

                - les 2 FORMES  Samedi|(?i)Dimanche  ou  Samedi|(?i:Dimanche)  cherchent la chane EXACTE 'Samedi' ou
                                                           
                      le MOT 'Dimanche', QUELLE que SOIT sa CASSE
                                 

                - les 2 FORMES ((?i)Samedi)|Dimanche  ou  (?i:Samedi)|Dimanche  cherchent la chane EXACTE 'Dimanche'
                                                          
                      ou le MOT 'Samedi', QUELLE que SOIT sa CASSE
                                    



 8) QUANTIFICATEURS :
    

        Les QUANTIFICATEURS de RPTITION peuvent tre placs APRS CHACUNE des FORMES suivantes :
                                 

            - un  caractre UNIQUE ( selon UNE des 13 SYNTAXES possibles, indiques au CHAPITRE 2, PARTIE 1 )
                                                    
            - une RFRENCE ARRIRE ou de GROUPE, relatif  un GROUPE de CAPTURE, NOMM ou NON
                                   
            - une liste d'ALTERNATIVES (..|..|..), SAUF si les diffrentes ALTERNATIVES sont des ASSERTIONS
                                                              
            - un  GROUPE de CAPTURE     (........), SAUF s'il s'agit d'une ASSERTION
                                            
            - un  groupe NON CAPTURANT  (?:......)  ou  NON CAPTURANT d'ALTERNATIVES (?|..|...|...)
                                    


        Il existe 3 TYPES de QUANTIFICATEURS :
                  

            - les QUANTIFICATEURS NON POSSESSIFS, de type " Greedy "   ( ~ " Fougueux " )
                                                         
            - les QUANTIFICATEURS NON POSSESSIFS, de type " Lazy "     ( ~ " Paresseux " )
                                                           
            - les QUANTIFICATEURS POSSESSIFS,     de type " Greedy "   ( ~ " Entier " )
                                                             


        Il existe 6 FORMES de QUANTIFICATEURS :
                  

        A) La FORME : {n} :
                      

               Elle signifie que l'entit PRCDENTE,  laquelle elle est RATTACHE, doit tre PRSENTE,
                                                                            
                   EXACTEMENT n FOIS
                   


               EXEMPLES :
               

                   ab{5}c  cherche la SEULE chane 'abbbbbc'
                                         
                   a.{5}c  cherche les DEUX lettres MINUSCULES 'a' et 'c', SPARES par 5 caractres QUELCONQUES
                                                


               NOTE : On a la RELATION :  0 <= n <= 65535
                                      



        B) La FORME : {n,} :
                      

              Elle signifie que l'entit PRCDENTE,  laquelle elle est RATTACHE, doit tre PRSENTE, AU MOINS n FOIS
                                                                             


               EXEMPLES :
               

                   ab{5,}c  cherche les DEUX lettres MINUSCULES 'a' et 'c', SPARES par AU MOINS 5 MINUSCULES 'b'
                                         
                   a.{5,}c  cherche les DEUX lettres MINUSCULES 'a' et 'c', SPARES par AU MOINS 5 car QUELCONQUES
                                               


               NOTE : On a la RELATION :  0 <= n <= 65535
                                      



        C) La FORME : {n,m} :
                      

               Elle signifie que l'entit PRCDENTE,  laquelle elle est RATTACHE, doit tre PRSENTE,
                                                                            
                   AU MOINS n FOIS  et  AU PLUS m FOIS
                         


               EXEMPLES :
               

                   ab{5,7}c  cherche les DEUX lettres MINUSCULES 'a' et 'c', SPARES par 5, 6 ou 7 MINUSCULES 'b'
                                          
                   a.{5,7}c  cherche les DEUX lettres MINUSCULES 'a' et 'c', SPARES par 5  7 caractres QUELCONQUES
                                                     


               NOTE :  On a les 3 RELATIONS :  0 <= n <= 65535  ,  0 <= m <= 65535  et  n <= m
                                                      



        D) La FORME : ? :
                      

               Elle signifie que l'entit PRCDENTE,  laquelle elle est RATTACHE, peut tre ABSENTE ou tre
                                                                            
                   PRSENTE, 1 FOIS, SEULEMENT
                     


               EXEMPLES :
               

                   ab?c  cherche UNE des DEUX chanes 'ab' ou 'abc', UNIQUEMENT
                                                
                   a.?c  cherche les DEUX lettres MINUSCULES 'a' et 'c', JOINTES ou SPARES par 1 caractre QUELCONQUE
                                                     


               NOTE : En fait, la FORME ? est QUIVALENTE  la FORME {0,1}
                                                              



        E) La FORME : * :
                      

               Elle signifie que l'entit PRCDENTE,  laquelle elle est RATTACHE, peut tre ABSENTE ou tre
                                                                            
                   PRSENTE, AU MOINS 1 FOIS
                     


               EXEMPLES :
               

                   ab*c  cherche DEUX MINUSCULES a et c, SPARES par un Nbre QUELCONQUE de MINUSCULES 'b', MME AUCUNE
                                               
                   a.*c  cherche DEUX MINUSCULES a et c, SPARES par un Nbre QUELCONQUE de car. QUELCONQUES, MME AUCUN
                                                   


               NOTE : En fait, la FORME * est QUIVALENTE  la FORME {0,}
                                                              



        F) La FORME : + :
                      

               Elle signifie que l'entit PRCDENTE,  laquelle elle est RATTACHE, doit tre PRSENTE, AU MOINS 1 FOIS
                                                                              


               EXEMPLES :
               

                   ab+c  cherche DEUX MINUSCULES 'a' et 'c', SPARES par un nombre, NON NUL, de lettres MINUSCULES 'b'
                                                             
                   a.+c  cherche DEUX MINUSCULES 'a' et 'c', SPARES par un nombre, NON NUL, de caractres QUELCONQUES
                                                                


               NOTE : En fait, la FORME + est QUIVALENTE  la FORME {1,}
                                                              



        G) TYPES des QUANTIFICATEURS :
           

               a) NON POSSESSIF, de TYPE " Greedy "  ( " Fougueux " ) :
                  


                      Les 6 QUANTIFICATEURS de type " Greedy " USUELS sont  {n}  , {n,}  ,  {n,m}  ,  ?  ,  *  et  +
                                                                   


                      Avec un QUANTIFICATEUR de TYPE " Greedy ", le MOTEUR de RECHERCHE slectionne, en PREMIER, la
                                                                   
                          forme RPTE, avec la valeur MAXIMALE indique pour ce QUANTIFICATEUR
                                                                   

                          Si, le RESTE de l'expression RGULIRE NE correspond PAS  la chane SUJET, le MOTEUR de
                                                                         
                              RECHERCHE slectionne la forme RPTE, avec la valeur MAXIMALE - 1
                                                                              

                          Si, le RESTE de l'expression RGULIRE NE correspond PAS  la chane SUJET, le MOTEUR de
                                                                         
                              RECHERCHE slectionne la forme RPTE, avec la valeur MAXIMALE - 2
                                                                              

                          Et, AINSI DE SUITE, jusqu' slection de la forme RPTE, avec la valeur MINIMALE du
                                                                               
                              QUANTIFICATEUR
                              

                          Si le RESTE de l'expression RGULIRE NE correspond TOUJOURS PAS  =>  AUCUNE solution trouve
                                                                 


               b) NON POSSESSIFS, de TYPE " Lazy "  ( " Paresseux " ) :
                  


                      Un QUANTIFICATEUR de type " Lazy " s'obtient en AJOUTANT le CARACTRE '?' APRS le
                                               
                          QUANTIFICATEUR de type " Greedy ", de MME nature
                                 


                      Les 5 QUANTIFICATEURS de type " Lazy " USUELS sont  {n,}?  ,  {n,m}?  ,  ??  ,  *?  et  +?
                                                               


                      Avec un QUANTIFICATEUR de TYPE " Lazy ", le MOTEUR de RECHERCHE slectionne, en PREMIER, la
                                                                   
                          forme RPTE, avec la valeur MINIMALE indique pour ce QUANTIFICATEUR
                                                                   

                          Si, le RESTE de l'expression RGULIRE NE correspond PAS  la chane SUJET, le MOTEUR de
                                                                         
                              RECHERCHE slectionne la forme RPTE, avec la valeur MINIMALE + 1
                                                                               

                          Si, le RESTE de l'expression RGULIRE NE correspond PAS  la chane SUJET, le MOTEUR de
                                                                         
                              RECHERCHE slectionne la forme RPTE, avec la valeur MINIMALE + 2
                                                                              

                          Et, AINSI DE SUITE, jusqu' slection de la forme RPTE, avec la valeur MAXIMALE du
                                                                               
                              QUANTIFICATEUR
                              

                          Si le RESTE de l'expression RGULIRE NE correspond TOUJOURS PAS  =>  AUCUNE solution trouve
                                                                 

                      IMPORTANT :
                      

                          Si l'expression RGULIRE se TERMINE par la forme RPTE, SEULE la valeur MINIMALE du
                                                                     
                              QUANTIFICATEUR sera donc utilise
                              


               c) POSSESSIFS, de type " Greedy " IMPLICITE :
                  


                      Un QUANTIFICATEUR POSSESSIF s'obtient en AJOUTANT le CARACTRE '+' APRS le QUANTIFICATEUR de
                                             
                          type " Greedy ", de MME nature
                                 


                      Les 5 QUANTIFICATEURS POSSESSIFS USUELS sont  {n,}+  ,  {n,m}+  ,  ?+  ,  *+  et  ++
                                                             


                      Avec un QUANTIFICATEUR POSSESSIF, le MOTEUR de RECHERCHE slectionne la forme RPTE, avec la
                                                                      
                          valeur MAXIMALE indique pour ce QUANTIFICATEUR, comme pour le TYPE " Greedy "
                                                                   


                          Par contre, si le RESTE de l'expression RGULIRE NE correspond PAS  la chane SUJET, le
                                                                                    
                              MOTEUR de RECHERCHE NE revient PAS en ARRIRE ( BACKTRACKING ) pour essayer d'AUTRES
                                                                      
                              valeurs de ce QUANTIFICATEUR
                                     

                                  =>  FIN de la RECHERCHE et AUCUNE solution trouve
                                          


               d) EXEMPLES :
                  

                      - Les SOUS-GABARITS  '\d+'  ou  '\d+?' , AJUSTENT le NOMBRE de CHIFFRES, de manire  ce que la
                                                        
                            SUITE VENTUELLE, du gabarit CORRESPONDE
                                         


                      - Le SOUS-GABARIT '\d++', ATOMIQUE, utilise le nbre MAXIMUM de CHIFFRES, QUELLE que SOIT la SUITE,
                                                               
                            VENTUELLE, du gabarit  APPARIER, pouvant, parfois, entraner l'CHEC de la RECHERCHE
                                                                           


                      Les expressions RGULIRES .*abcDE  ou  .*?abcDE trouvent la chane SUJET '012345abcDE'
                                                                                  


                      L'expression RGULIRE .*+abcDE, elle, ne trouve RIEN, car la 1RE PARTIE du GABARIT  '.*+'
                                                                                      
                          consomme, DJ, TOUS les caractres jusqu'au(x) caractre(s) 'FIN de LIGNE', EXCLUS
                                                                                 


                      La RegExp ab+?c ( ou ab+c ) trouve TOUTE chane COMMENANT par 'a' et FINISSANT par 'c' avec un
                                                             
                           nombre NON NUL de CARACTRES 'b', ENTRE les DEUX
                                                     


                      La RegExp ab+? ne trouve que la SEULE chane 'ab', puisque le QUANTIFICATEUR " Lazy " n'est suivi
                                                                                          
                          d'AUCUN caractre !
                            


                      Si la chane SUJET 'abbbbbbbbbbbbc' :
                                          

                          - la RegExp ab+\l\l trouve celle-ci : Il y a RETOUR en ARRIRE  d'1 caractre et '\l\l' est
                                                                               
                                pris par la  chane 'bc'
                                                     


                          - la RegExp ab++\l\l ne trouve RIEN car 'b++' consomme TOUS les CARACTRES 'b' et '\l\l'
                                                                                         
                                NE peut PAS correspondre au SEUL caractre 'c' FINAL
                                                             


                      Si la chane SUJET est 'abbbbbbbbbbbbcd', les DEUX gabarits, ci-dessus, fonctionnent car '\l\l'
                                                                                            
                          est reprsent, dans les DEUX cas, par la chane 'cd'
                                                                        


                      La RegExp \b(cat|dog|mouse)(?:\W+\w+){0,6}?\W+(cat|dog|mouse)\b trouve la CHANE 'cat', 'dog'
                                                       
                          ou 'mouse', SPARE par 6 MOTS au PLUS, MME sur PLUSIEURS lignes, d'une AUTRE chane 'cat',
                                                                
                          'dog' ou 'mouse'
                                 


                      La RegExp \b(cat|dog|mouse)(?:[^\w\r\n]+\w+){0,6}?[^\w\r\n]+(cat|dog|mouse)\b trouve la CHANE
                                
                      'cat', 'dog' ou 'mouse', SPARE par 6 MOTS au PLUS d'une MME ligne, d'une AUTRE chane 'cat',
                                                          
                      'dog' ou 'mouse'
                             

                          NOTE :   Le CAS 'dog........dog', par exemple, est donc POSSIBLE
                                                                


               d) REMARQUE :
                  

                      Soit la chane SUJET  'abcabcabcabcabcabcdefdefdefdefdefdefghighighighighighi'  ( 6 FOIS la
                                             

                          CHANE 'abc', SUIVIE de 6 FOIS la CHANE 'def', SUIVIE de 6 FOIS la CHANE 'ghi' )
                                                                                    


                          - La RegExp (abc|def|ghi){3,4} reprsente 3 ou 4 groupes de TROIS lettres, pouvant tre,
                                                              
                                CHOIX  'abc' , 'def'  ou  'ghi' , soit, SUCCESSIVEMENT, les QUATRE chanes CONTIGUS :
                                                                         

                                  'abcabcabcabc'  ,  'abcabcdefdef'  ,  'defdefdefdef'  et, enfin,  'ghighighighi'
                                                                 


                          - La RegExp (abc){3,4}|(def){3,4}|(ghi){3,4} reprsente 3 ou 4 groupes de TROIS lettres,
                                                      
                                CHACUN d'eux DEVANT tre GAL   'abc' , 'def'  ou  'ghi, soit, SUCCESSIVEMENT, les
                                                                 
                                TROIS chanes NON contigus :
                                         

                                  'abcabcabcabc'  ,  'defdefdefdef'  et, enfin,  'ghighighighi'
                                                          



        H) Groupes ATOMIQUES :
           

               Un groupe ATOMIQUE est la syntaxe ORIGINELLE d'une forme RPTE, avec un QUANTIFICATEUR POSSESSIF
                                                         

               On a les QUIVALENCES suivantes :
                        

                   Caractre<Quantificateur POSSESSIF>   ==   (?>Caractre<Quantificateur GREEDY>)
                           
                   (.......)<Quant. Possessif>           ==   (?>(.......)<Quantificateur GREEDY>)
                                   
                   (?:.....)<Quant. Possessif>           ==   (?>(?:.....)<Quantificateur GREEDY>)
                                   


               REMARQUE :
               

                   Un groupe ATOMIQUE ne constitue PAS, en soi, un groupe de CAPTURE. Si celui-ci doit tre
                                                 
                       RUTILIS, on utilisera un COUPLE supplmentaire de PARENTHSES INTERNES
                                                            


               EXEMPLES :
               

                   (?>(\d+))abc\1  cherche TOUTE chane 'abc', ENTRE DEUX sries IDENTIQUES de CHIFFRES
                                                 



                   Quand on recherche l'INTGRALIT des LIGNES d'un fichier FINISSANT par une CHANE  FIXE, la
                                                               
                       recherche sera PLUS efficace et PLUS rapide, en combinant groupe ATOMIQUE et LOOKBEHIND POSITIF
                                                         
                       ( Voir PARTIE 9, ci-APRS )


                         La RegExp  (?>(.*))(?<=)\R?   ou   la forme POSSESSIVE quivalente  (.*+)(?<=)\R?
                                                                     
                             sera ainsi prfre   (.*)$\R?
                                                    

                       En effet :

                         - le groupe ATOMIQUE (?>(.*)) prend, OBLIGATOIREMENT, TOUS les caractres de CHAQUE ligne,
                                             
                               depuis le PREMIER caractre jusqu'au DERNIER caractre  ( => ANCRE $ NON ncessaire )
                                                                              

                         - le groupe de CAPTURE (.*) les MMORISE pour une rutilisation VENTUELLE
                                                                

                         - l'ASSERTION (?<=) vrifie si la chane FIXE  est bien PRSENTE  la FIN de CHAQUE ligne
                                                       

                               MAIS, en cas de rsultat NGATIF, AUCUN BACKTRACKING n'a lieu
                                                      

                                   => La recherche choue PLUS VITE et on passe IMMDIATEMENT  la ligne SUIVANTE !
                                                                       



        I) Groupes OPTIONNELS :
           

               Un groupe OPTIONNEL reprsente, par CONVENTION, un GROUPE de CAPTURE qui peut tre PRSENT ou NON, c'est
                                                              
                    dire, TOUT groupe, SUIVI d'UN des 4 QUANTIFICATEURS suivants :
                                    

                         {0,n} avec n > 0   ,   (0,)   ,   ?   ou   *
                                               


                   EXEMPLES :
                   

                       (\d)*       reprsente un CHIFFRE, un NOMBRE ou la chane VIDE      => GROUPE 1 = CHIFFRE de 0  9
                                                                                              

                       (abc)?      reprsente la CHANE 'abc' ou la chane VIDE            => GROUPE 1 = CHANE 'abc'
                                                                                                     

                       (\xFF){0,5} reprsente de 1  5 caractres \x0C  ou la chane VIDE  => GROUPE 1 = CARACTRE \x0C
                                                                               


                   IMPORTANT :
                   

                       Un groupe OPTIONNEL peut TOUJOURS s'crire sous la FORME d'un groupe NON OPTIONNEL, SUIVI du
                                                                             
                           QUANTIFICATEUR ? :
                           

                               - la FORME ((RegExp){1,n})? est IDENTIQUE  la FORME (RegExp){0,n}
                                                           
                               - la FORME ((RegExp){1,})?  est IDENTIQUE  la FORME (RegExp){0,}
                                                            
                               - la FORME ((RegExp)+)?     est IDENTIQUE  LA FORME (RegExp)*
                                                               


                       Cette SYNTAXE ' groupe NON OPTIONNEL, SUIVI du QUANTIFICATEUR ? ' sera NCESSAIRE pour l'excution
                                               
                           CORRECTE des remplacements CONDITIONNELS  ( Voir CHAPITRE 3, PARTIE 8 )
                                                       


                   REMARQUES :
                   

                       Soit la chane SUJET '678abc123DEF123'
                                             

                           (\w+)?123, IDENTIQUE  l'expression RGULIRE \w*123, trouve TOUTE la chane SUJET
                                                                           

                           \w+?123 cherche la PLUS PETITE suite de caractres de MOT, NON NULLE, SUIVIE de la CHANE
                                                                   
                               '123' soit la SOUS-chane '678abc123' de la chane SUJET
                                                       


                       La POSITION d'une ANCRE, SELON sa place  l'INTRIEUR ou  l'EXTRIEUR d'un groupe OPTIONNEL,
                                                                    
                           peut MODIFIER le comportement de l'expression RGULIRE
                                                                 

                               Soit les SIX lignes, ci-DESSOUS, constitues d'une TABULATION, SUIVIE d'un NOMBRE
                                                                                 
                                   de 1  5 CHIFFRES, ventuellement ABSENT :
                                        


                                     	1
                                     	12
                                     	123
                                     	1234
                                     	12345


                               La RECHERCHE de  \t(\d\d\d)?$  ne trouve QUE les CHANES  '	'  et  '	123', car elle
                                                                                   
                                   signifie 1 TABULATION, suivie de RIEN ou de 3 CHIFFRES, qui TERMINENT la ligne
                                                                     

                               La RECHERCHE de  \t(\d\d\d$)?  trouve une TABULATION '	' ou la CHANE '	123', car

                                   elle signifie 1 TABULATION, VENTUELLEMENT suivie de 3 CHIFFRES, TERMINANT la ligne
                                                          



        J) DIFFRENCES entre QUANTIFICATEURS :
           


               Soit la chane SUJET   Liste : "chat","chien","tortue","hamster"...  au DBUT de la 1RE ligne :
                                      


                   la RECHERCHE  ^.*     trouve la CHANE  'Liste : "chat","chien","tortue","hamster"...'
                                                         
                   la RECHERCHE  ^.*"    trouve la CHANE  'Liste : "chat","chien","tortue","hamster"'
                                                        
                   la RECHERCHE  ^.*",   trouve la CHANE  'Liste : "chat","chien","tortue",'
                                                       
                   la RECHERCHE  ^.*"\.  trouve la CHANE  'Liste : "chat","chien","tortue","hamster".'
                                                      

                       Dans ces QUATRE recherches, on cherche,  PARTIR du DBUT de ligne, le MAXIMUM de caractres
                                                                         
                           en SOI  ou  jusqu' la CHANE '"'  ou  jusqu' la CHANE '",'   ou  jusqu' la CHANE '".'
                                                                                                            


                   la RECHERCHE  ^.*?     Ne trouve RIEN, car le MINIMUM de caractres en SOI est 0, soit la chane VIDE
                                                                                                
                   la RECHERCHE  ^.*?"    trouve la CHANE  'Liste : "'
                                                        
                   la RECHERCHE  ^.*?",   trouve la CHANE  'Liste : "chat",'
                                                       
                   la RECHERCHE  ^.*?"\.  trouve la CHANE  'Liste : "chat","chien","tortue","hamster".'
                                                      

                       Dans ces QUATRE recherches, on cherche,  PARTIR du DBUT de ligne, le MINIMUM de caractres
                                                                         
                           en SOI  ou  jusqu' la CHANE '"'  ou  jusqu' la CHANE '",'   ou  jusqu' la CHANE '".'
                                                                                                            


                   la RECHERCHE  ^.*+     trouve la CHANE  'Liste : "chat","chien","tortue","hamster"...'
                                                        
                   la RECHERCHE  ^.*+"    Ne trouve RIEN
                                               
                   la RECHERCHE  ^.*+",   Ne trouve RIEN
                                              
                   la RECHERCHE  ^.*+"\.  Ne trouve RIEN
                                             

                       Les TROIS DERNIRES recherches ne trouve JAMAIS RIEN, car  ^.*+  consomme TOUJOURS le MAXIMUM
                                                                       
                           de CARACTRES de la LIGNE, y COMPRIS les signes GUILLEMET ("), VIRGULE (,) ou POINT (.)
                                            

                           Il ne reste donc RIEN pour correspondre au CARACTRE(S), plac(s)  la FIN de l'expression
                                                                                   
                               RGULIRE. Comme, de PLUS, le QUANTIFICATEUR est POSSESSIF, AUCUN backtracking n'a lieu
                                                  

                                   => AUCUNE solution !
                                      


               Soit la chane SUJET   123456789abc1234abcd   au DBUT de la 1RE ligne d'un FICHIER :
                                       


                   la RECHERCHE  \d+\w{5}   trouve les DEUX  chanes  '123456789abc12' puis '34abcd'
                                                                   

                       Pour la 2ME chane '34abcd' trouve, il y a eu BACKTRACKING, car \d+ = '3' et \w{5} = '4abcd'
                                                                        


                   la RECHERCHE  \d+?\w{5}  trouve les TROIS chanes  '123456' puis '789abc' et enfin '1234ab'
                                                                              

                       AUCUN backtracking n'est NCESSAIRE pour obtenir ces TROIS concordances
                                                
                       Dans ces TROIS rsultats, \d+? reprsente un SEUL chiffre et \w{5} les CINQ DERNIERS caractres
                                                                    


                   la RECHERCHE  \d++\w{5}  trouve UNIQUEMENT la chane '123456789abc12'
                                                      
                         avec \d++ = '123456789' et \w{5} = 'abc12'
                                   

                       En effet, comme AUCUN backtracking n'est AUTORIS, du fait de la forme POSSESSIVE  \d++ , la
                                                                      
                           SECONDE chane '34abcd' NE satisfait PAS l'expression RGULIRE
                                                    


               Les groupes ATOMIQUES - POSSESSIFS seront, de PRFRENCE, utiliss dans des expressions RGULIRES
                                                                        
                   COMPLEXES :
                   

                      - pour DIMINUER le nombre TOTAL de CAS  ANALYSER par le MOTEUR de RECHERCHE
                                             

                      - pour VITER la formation de BOUCLES INFINIES
                                              



 9) LOOKAROUNDS :
    

        Les LOOKAROUNDS, ou ASSERTIONS utilisateur, sont des expressions RGULIRES, de longueur NULLE, ne consommant
                                                         
            AUCUN caractre dans la chane SUJET  analyser, et reprsentant une CONDITION particulire, DEVANT tre
                                                                            
            ralise ou NON, AVANT ou  PARTIR de la position COURANTE du POINTEUR de RECHERCHE
                                          


            TRS IMPORTANT :
            

                Les expressions RGULIRES, places dans les LOOKAROUNDS, ne font ABSOLUMENT PAS partie du GABARIT de la
                                                                        
                    RECHERCHE, mais doivent tre SATISFAITES,  la position COURANTE du POINTEUR, lors de leur ANALYSE
                                                                       


                PENDANT la VRIFICATION des CONDITIONS, indiques dans les LOOKAROUNDS, le POINTEUR de RECHERCHE n'est
                                          
                    JAMAIS dplac !
                    


        Il existe 4 FORMES de LOOKAROUND ( Test ) :
                     

            A) La FORME (?= .....) :
                        

                   Cette ASSERTION, appele POSITIVE LOOKAHEAD ( Test APRS POSITIF ) cherche, dans la chane SUJET,
                                                                      
                       si l'expression RGULIRE, contenue dans le LOOKAHEAD, est SATISFAITE,  COMPTER de la
                                                                    
                       position COURANTE du POINTEUR de RECHERCHE, SANS modifier cette POSITION
                                               


               EXEMPLE :
               

                   q(?=u)  cherche la lettre MINUSCULE 'q', lorsque celle-ci est SUIVIE de la lettre MINUSCULE 'u'
                                                                             

                   .(?=.)  cherche TOUT caractre DIFFRENT de 'FIN de LIGNE', lorsqu'il est SUIVI d'un AUTRE caractre
                                                         
                       DIFFRENT de 'FIN de LIGNE' soit, globalement, TOUT caractre SAUF le DERNIER de CHAQUE ligne
                                           


               IMPORTANT :
               

                   Les FORMES (?=u) et [u]  n'ont PAS la MME signification !
                                          

                       La RegExp  q[u]  ou  qu  reprsente DEUX lettres MINUSCULES, lettre 'q' SUIVIE de la lettre 'u'
                                                        
                       La RegExp  q(?=u)        ne reprsente QUE la lettre MINUSCULE 'q' lorsque CELLE-CI est
                                                        
                           SUIVIE de la lettre MINUSCULE 'u'
                                         

                               Soit la chane SUJET 'Orques'
                                                

                                   =>  la RECHERCHE q[u]  ou  qu  trouve les DEUX caractres 'qu'
                                                                                    
                                   =>  la RECHERCHE q(?=u)        trouve la lettre MINUSCULE 'q', UNIQUEMENT
                                                                                


               REMARQUE :
               

                   La RegExp  q(?=u)i  NE peut PAS trouver le DBUT de la chane SUJET 'quittance', par exemple. En
                                                                 
                       effet, au DBUT, une lettre MINUSCULE 'q' est PRSENTE et BIEN SUIVIE de la lettre MINUSCULE 'u'
                                                                           
                       Mais, au MOMENT de vrifier la PRSENCE de la MINUSCULE 'i', dans la chane SUJET, le POINTEUR
                                                                       
                       ne se trouve que DEVANT la lettre 'u', car l'ASSERTION (?=u) n'a PAS consomm de CARACTRE
                                                           
                       Comme cette lettre 'u' NE correspond PAS  la lettre MINUSCULE 'i' du GABARIT => AUCUNE solution
                                                           


                           Par CONTRE, la RegExp  q(?=u).i  trouve, EFFECTIVEMENT, la CHANE 'qui', car le caractre
                                                                         
                               . du GABARIT, auquel correspond la lettre 'u' de la chane SUJET, fait AVANCER le
                                                                                    
                               POINTEUR de recherche SUR la lettre MINUSCULE 'i' !
                                                        


                           De MME, la RegExp q.(?=i)i trouve, EFFECTIVEMENT, la CHANE 'qui' du MOT 'quittance', car,
                                                                    
                               APRS avoir trouv la CHANE 'qu' avec le DBUT de la RegExp q. , le POINTEUR de RECHERCHE
                                                                                      
                               est SUR la lettre MINUSCULE 'i' et il est VIDENT que la FIN de la RegExp (?=i)i est
                                                                                
                               SATISFAITE en prsence de la lettre MINUSCULE 'i' de la chane SUJET 'quittance'
                                                                        



            B) La FORME (?! .....) :
                        

                   Cette ASSERTION, appele NEGATIVE LOOKAHEAD ( Test APRS NGATIF ) cherche, dans la chane SUJET,
                                                                      
                       si l'expression RGULIRE, contenue dans le LOOKAHEAD, n'est PAS SATISFAITE,  COMPTER de la
                                                                      
                       position COURANTE du POINTEUR de RECHERCHE, SANS modifier cette POSITION
                                               


               EXEMPLE :
               

                   q(?!u)  cherche la lettre MINUSCULE 'q', lorsque celle-ci n'est PAS SUIVIE de la lettre MINUSCULE 'u'
                                                                               

                   .(?!.)  cherche TOUT caractre DIFFRENT de 'FIN de LIGNE', lorsqu'il n'est PAS SUIVI d'un AUTRE
                                                           
                       caractre DIFFRENT de 'FIN de LIGNE' soit, globalement, le DERNIER ou SEUL car. de CHAQUE ligne
                                                        


               IMPORTANT :
               

                   Les FORMES (?!u) et [^u] n'ont PAS la MME signification !
                                         

                       La RegExp  q[^u]   reprsente DEUX lettres, la MINUSCULE 'q' SUIVI d'UN caractre DIFFRENT de 'u'
                                                                        
                       La RegExp  q(?!u)  reprsente QUE la lettre MINUSCULE 'q', lorsque CELLE-CI n'est PAS SUIVIE
                                                                         
                           de la lettre MINUSCULE 'u'
                                        

                               Soit la chane SUJET 'Iraq' suivie de \r\n   ( MOT Iraq en FIN de ligne )
                                                                             

                                   =>  la RECHERCHE q[^u]   trouve la lettre MINUSCULE 'q' SUIVI de '\r'
                                                                          
                                   =>  la RECHERCHE q(?!u)  trouve la lettre MINUSCULE 'q', UNIQUEMENT
                                                                          


            C) La FORME (?<= .....) :
                        

                   Cette ASSERTION, appele POSITIVE LOOKBEHIND ( Test AVANT POSITIF ) cherche, dans la chane SUJET,
                                                                      
                       si l'expression RGULIRE, contenue dans le LOOKBEHIND, est SATISFAITE, AVANT la position
                                                                  
                       COURANTE du POINTEUR de RECHERCHE, SANS modifier cette POSITION
                                      


               EXEMPLE :
               

                   (?<=q)u  cherche la lettre MINUSCULE 'u', lorsque celle-ci est PRCDE de la lettre MINUSCULE 'q'
                                                                             


               IMPORTANT :
               

                   Les FORMES (?<=q) et [q]  n'ont PAS la MME signification !
                                          

                       La RegExp  [q]u  ou  qu  reprsente DEUX lettres MINUSCULES, 'u' PRCDE d'un 'q'
                                                        
                       La RegExp  (?<=q)u       ne reprsente QUE la lettre MINUSCULE 'u' lorsque CELLE-CI est
                                                       
                           PRCDE de la lettre MINUSCULE 'q'
                                         

                               Soit la chane SUJET 'Orques'
                                                

                                   =>  la RECHERCHE [q]u  ou  qu  trouve les DEUX caractres 'qu'
                                                                                    
                                   =>  la RECHERCHE (?=q)u        trouve la lettre MINUSCULE 'u', UNIQUEMENT
                                                                                

               REMARQUE :
               

                   Dans CERTAINS cas, l'utilisation d'un LOOKBEHIND POSITIF ne donne PAS le rsultat ESCOMPT :
                                                                        

                   (?<=.).  devrait TROUVER TOUT caractre DIFFRENT de 'FIN de LIGNE', quand il est PRCD d'un AUTRE
                                                                
                       caractre DIFFRENT de 'FIN de LIGNE' soit, globalement, TOUT les caractres, SAUF le PREMIER
                                                       
                       de CHAQUE ligne
                          

                           MAIS, suite au BUG de NOTEPAD++, ( voir PLUS HAUT ), on trouve, UN caractre sur DEUX !!
                                                                  


                   (?<=\n).*  devrait TROUVER, tout comme la RegExp .* , une SUITE de caractres STANDARD, PRCDE
                                                                            
                       de \n , soit globalement, CHAQUE ligne COMPLTE du fichier COURANT
                                               

                           MAIS, suite au BUG de NOTEPAD++, on trouve, en fait, UNE ligne sur DEUX !!
                                                            


            D) La FORME (?<! .....) :
                         

                   Cette ASSERTION, appele NEGATIVE LOOKBEHIND ( Test AVANT NGATIF ) cherche, dans la chane SUJET,
                                                                      
                       si l'expression RGULIRE, contenue dans le LOOKBEHIND, n'est PAS SATISFAITE, AVANT la
                                                                    
                       position COURANTE du POINTEUR de RECHERCHE, SANS modifier cette POSITION
                                               


               EXEMPLE :
               

                   (?<!q)u  cherche la lettre MINUSCULE 'u', lorsque celle-ci n'est PAS PRCDE de la MINUSCULE 'q'
                                                                        


               IMPORTANT :
               

                   Les FORMES (?<!q) et [^q] n'ont PAS la MME signification !
                                         

                       La RegExp  [^q]u  reprsente 2 lettres, la MINUSCULE 'u', PRCDE d'UN caractre DIFFRENT de 'q'
                                                                          
                       La RegExp  (?<!q)u  reprsente QUE la lettre MINUSCULE 'u', lorsque CELLE-CI n'est PAS PRCDE
                                                                         
                           de la lettre MINUSCULE 'q'
                                        

                               Soit la chane SUJET 'futile'
                                                

                                   =>  la RECHERCHE [^q]u    trouve la lettre MINUSCULE 'u' PRCDE de la MINUSCULE 'f'
                                                                                  
                                   =>  la RECHERCHE (?<!q)u  trouve la lettre MINUSCULE 'u', UNIQUEMENT
                                                                          

               REMARQUE :
               

                   Dans CERTAINS cas, l'utilisation d'un LOOKBEHIND NGATIF ne donne PAS le rsultat ESCOMPT :
                                                                        

                   (?<!.).  devrait TROUVER TOUT caractre DIFFRENT de 'FIN de LIGNE', quand il n'est PAS PRCD d'un
                                                                  
                       caractre DIFFRENT de 'FIN de LIGNE' soit, UNIQUEMENT, le PREMIER caractre de CHAQUE ligne
                                                           

                           MAIS, suite au BUG de NOTEPAD++, ( voir PLUS HAUT ), on trouve, TOUS les caractres  !!
                                                                  


                   (?<!\n).*  devrait TROUVER une SUITE de caractres STANDARD, NON PRCDE de \n , soit globalement,
                                                          
                       la SUITE des caractres,  partir de la POSITION 2 , de CHAQUE ligne du fichier COURANT
                                                          

                           MAIS, suite au BUG de NOTEPAD++, on trouve, en fait, TOUS les caractres  !!
                                                            


            TRS IMPORTANT :
            

                L'expression RGULIRE abc(?!def) cherche la CHANE 'abc', NON SUIVIE de la CHANE 'def'
                                                                             

                    MAIS le gabarit INVERSE  (?!abc)def  NE signifie PAS une CHANE 'def', PRCDE de TROIS caractres
                                                    
                        DIFFRENTS de 'abc' !
                             

                            En effet, lorsque le POINTEUR de RECHERCHE est situ JUSTE AVANT 'def', le LOOKAHEAD
                                                                               
                                POSITIF (?!abc) est TOUJOURS VRAI car la CHANE 'def' est TOUJOURS DIFFRENTE de 'abc'
                                                                                   

                                    =>  TOUTES les occurrences de 'def' sont considres JUSTES
                                                                                

                    Par CONTRE, le LOOKBEHIND (?<!abc)def permet EFFECTIVEMENT de trouver une CHANE 'def', NON PRCDE
                                                                 
                        de la CHANE 'abc' !
                                      


            NOTES DIVERSES :
            

                Une expression RGULIRE peut tre, SIMULTANMENT, PRCDE d'un LOOKBEHIND et SUIVIE d'un LOOKAHEAD
                                                 

                    (?<!Mr )Guy(?! THE) trouve les CHANES 'Guy', NON PRCDES de 'Mr ' et NON SUIVIES de ' THE'
                                                           


                Un lOOKAHEAD ( Test APRS ) peut aussi tre plac AVANT l'expression RGULIRE  chercher !
                                                             

                    (?=....THE)Guy trouve TOUTE chane 'Guy', si elle est SUIVIE de la CHANE ' THE'
                                                                   

                        ( Exemples PLUS utiles exposs PLUS LOIN ! )
                                                       


                Un LOOKBEHIND ( Test AVANT ) peut aussi tre plac APRS l'expression RGULIRE  chercher !
                                                             

                    Guy(?<=Mr....) trouve TOUTE chane 'Guy', si elle est PRCDE de la CHANE 'Mr '
                                                                    

                        ( Exemples PLUS utiles exposs PLUS LOIN ! )
                                                       


                Les LOOKAROUNDS sont des groupes ATOMIQUES, par DFAUT et ne forment PAS des GROUPES de CAPTURE
                                             
                    Aussi, si le CONTENU d'un LookAROUND doit tre rutilis, on placera un COUPLE de PARENTHSES
                                                                     
                    supplmentaires,  l'INTRIEUR du LOOKAROUND. Cependant AUCUN BACKTRACKING n'aura lieu DANS le
                                                                                
                    LOOKAROUND pour essayer d'AUTRES permutations, afin de satisfaire l'expression RGULIRE !
                                                                                   

                        Soit la REGEXP :  (?=(\d+))\w+\1    ( Donc \1 = \d+ )
                                                     

                        Si la chane SUJET est '123x12', alors \1 = '123', mais le POINTEUR de recherche est TOUJOURS
                                                                                 
                            DEVANT la chane SUJET car \w+ = '123x12' puis revient en ARRIRE jusqu'au PREMIER '1',
                                                                   
                            tentant, SANS succs de trouver '123', APRS \w+  et comme il n'y a AUCUN succs, non plus,
                                                                                
                            en AVANANT le POINTEUR de RECHERCHE aux positions SUIVANTES  =>  AUCUNE solution trouve
                                                                 

                            Si le BACKTRACKING tait possible dans le LOOKAROUND, on aurait eu,  la FIN du PROCESSUS :
                                                                               
                                \d+ = '12' ,  \w+ = '3x'  et  \1 = '12',  comme avec la RegExp similaire  (\d+)\w+\1
                                                                                

                        Cependant, si la chane SUJET est '456x56', le BACKTRACKING dans \d+ n'est PAS ncessaire.
                                                                                  
                            En effet, \d+ = \1 = '456' et \w+ = '456x56' puis revient en ARRIRE jusqu'au PREMIER '4'
                                                                       
                                tentant, SANS succs de trouver '456', APRS \w+, PUIS, le pointeur se DPLACE DEVANT
                                                                                       
                                le '5' => \1 = '56' et \w+ = '56x56' et, APRS retour en ARRIRE, on a bien :
                                                    
                                \d+ = '56'  , \w+ = 'x'  et  \1 = '56'  =>  la CHANE '56x56' est la SOLUTION !
                                                     


                Les LOOKAROUNDS peuvent tre IMBRIQUS :
                                  

                   (?<=(?<!999)ABC)123 trouve TOUTE chane '123', PRCDE de la chane 'ABC', elle-mme NON PRCDE
                                                                   
                       de la chane '999'
                                     

                   123(?=ABC(?!999)) trouve TOUTE chane '123', SUIVIE de la chane 'ABC', elle-mme NON SUIVIE de la
                                                                   
                       chane '999'
                               


                Les LOOKAROUNDS peuvent contenir des ALTERNATIVES
                                          

                    (?<=000|99.)ABC trouve TOUTE chane 'ABC', si PRCDE de la chane '000'  ou  de la chane '99',
                                                                               
                        SUIVIE d'UN caractre QUELCONQUE, DIFFRENT de \n, \f et \r
                                                

                    ABC(?=000|99|123.) trouve TOUTE chane 'ABC', SUIVIE d'UNE des 3 chanes '000' , '99'  ou  de la
                                                       
                        chane '123', SUIVIE d'UN caractre QUELCONQUE, DIFFRENT de \n, \f et \r
                                                           

                    REMARQUE :
                    

                        CONTRAIREMENT au LOOKAHEADS, les ALTERNATIVES des LOOKBEHINDS doivent, OBLIGATOIREMENT, tre
                                            
                            de MME longueur
                               

                                (?<=000|99)ABC  =>  Message d'ERREUR  'Invalid regular expression'
                                                   


                L'expression RGULIRE, figurant dans un LOOKBEHIND, ne doit tre COMPOSE QUE de sous-expressions
                                                               
                    de LONGUEUR FINIE
                       

                        =>  Les OPRATEURS  *   ,   +   ,   ?   ,   {n,}   et   {m,n}   sont INTERDITS
                                                    


                    IMPORTANT :
                    

                        Un LOOKBEHIND POSITIF, de FORME (?<= RegExp), doit tre, de prfrence, REMPLAC par la FORME
                                                                  
                            RegExp\K, qui permet des expressions de longueur NON FINIE, dans RegExp
                                                                   

                            En effet, UNE FOIS la RegExp ( avec POSSIBILIT de zones de longueur NON FINIE ) VALUE,
                                                                                 
                                elle est IGNORE par le MOTEUR de RECHERCHE et SEULE la partie, place APRS \K,
                                                                   
                                constituera le GABARIT de la RECHERCHE ( Voir EXEMPLES ci-dessous )
                                                                       


                    EXEMPLES :
                    

                        (?<=\d{3}..xyz)ABC cherche la CHANE 'ABC', si celle-ci est PRCDE par une CHANE compose
                                                               
                            de 3 CHIFFRES, suivis de DEUX caractres QUELCONQUES, DIFFRENTS de \n, \f et \r, suivis de
                                                         
                            la CHANE 'xyz'
                                       


                        (?<=a{3})ABC cherche la CHANE 'ABC', si celle-ci est PRCDE par la CHANE 'aaa'
                                                                               
                        (?<=a){3}ABC cherche galement la CHANE 'aaaABC', bien que le QUANTIFICATEUR soit en DEHORS
                                                                     
                            du LOOKBEHIND
                               


                        (?<=\d{3,}..xyz)ABC  =>  Message d'ERREUR  'Invalid regular expression'
                              


                        (?<=(?=.{0,3}abc).{6})def cherche la chane 'def', PRCDE d'une chane 'abc', place DANS
                                                              
                            les SIX caractres PRCDANT la chane 'def'
                                            

                            La FORME : (?=.{0,3}abc).{6}\Kdef est cependant  PRFRER
                                       

                                A une POSITION p donne, on VRIFIE si  'abc'   ou   .abc   ou   ..abc   ou   ...abc
                                                                                 

                                    Si OK,  partir de cette MME position p, on CHERCHE 6 caractres QUELCONQUES suivis
                                                                        
                                    de la CHANE 'def', MAIS on ne CONSERVE QUE la partie APRS \K, c'est  dire 'def'
                                                                                     


                        DEF\d+\Kabc cherche la CHANE 'abc' spare d'une chane 'DEF' ANTRIEURE par une SUITE
                                                                             
                            QUELCONQUE de CHIFFRES, NON NULLE
                              

                                SEULE la chane 'abc', place APRS la forme \K, est CONSERVE en tant que GABARIT
                                                                 

                                    ( La forme : (?<=DEF\d+)abc est, en effet, NON AUTORISE ! )
                                                                 


                        Pour SUPPRIMER le mot 'foo', lorsque celui-ci est PRCD d'au MOINS 3 CHIFFRES, TROIS formes
                                                                    
                            sont DONC possibles :
                                 

                              Partie RECHERCHE :  (\d{3})foo         Partie REMPLACEMENT :  \1    ( vaut \d{3} )
                                                                                             
                              Partie RECHERCHE :  (?<=\d{3})foo      Partie REMPLACEMENT :  RIEN
                                                                               
                              Partie RECHERCHE :  \d{3}\Kfoo         Partie REMPLACEMENT :  RIEN
                                                                                  

                                  La DERNIRE syntaxe, avec \K, est toutefois la plus SIMPLE
                                                                       

                              ATTENTION :
                              

                                  Utiliser UNIQUEMENT le bouton " Remplacer tout " pour les DEUX DERNIERS cas
                                                                    


                        Pour RECHERCHER la VALEUR de TOUS les CHAMPS 'name' de NativeLang.xml, SANS les GUILLEMETS :
                                                          

                                   name .+?"\K.+(?=") , avec 2 ESPACES, 1 AVANT et 1 APRS le mot 'name'
                                                



                L'expression RGULIRE, figurant dans un LOOKBEHIND, ne doit PAS comporter de RFRENCES ARRIRE
                                                                        
                    ou de RFRENCES de GROUPE
                          

                    EXEMPLE :
                    

                        Si on cherche la PLUS LONGUE chane de 3  6 lettres MAJUSCULES, et, PAS PLUS de 2 LETTRES
                                                          
                            CONSCUTIVES IDENTIQUES, avec le LOOKBEHIND ci-dessous
                                      

                                [A-Z][A-Z](?:([A-Z])(?<!\1\1\1)){1,4}  =>  ERREUR = 'Invalid regular expression'
                                                                           


                            En fait, il faut utiliser un LOOKBEHIND, pour revenir du NOMBRE de caractres DSIRS,
                                                         
                                puis placer un LOOKAHEAD,  l'INTRIEUR du LOOKBEHIND, qui vrifie la NON PRSENCE
                                                                  
                                de 3 lettres MAJUSCULES CONSCUTIVES IDENTIQUES, aux POSITIONS 1, ..., n-2, avec n
                                                            
                                reprsentant la LONGUEUR de la CHANE de lettres MAJUSCULES
                                                                         


                                    [A-Z][A-Z](?:([A-Z])(?<=(?!\1\1\1)...)){1,4}     ( CAS 1 )
                                           
                            ou
                                    [A-Z][A-Z](?:(?<=(?!([A-Z])\1\1)..)[A-Z]){1,4}   ( CAS 2 )
                                         


                            On peut aussi VITER le LOOKBEHIND, avec la FORME :
                                          

                                    (?:([A-Z])(?!\1\1)){1,4}[A-Z][A-Z]               ( CAS 3 )
                                                     

                                qui peut se traduire par :

                                    De UNE  QUATRE lettres MAJUSCULES, CHACUNE d'elles n'tant PAS RPTE DEUX fois,
                                                                   
                                        SUIVIE(S) par DEUX lettres MAJUSCULES
                                        


                    EXPLICATIONS du CAS 1 :
                    

                        RAPPEL :
                        

                            Soit la STRUCTURE gnrale ((Car)(Test sur Car)){1,n}
                                              

                                On considre la chane MAXIMUM de n CARACTRES ( Quantificateur GREEDY )
                                                                  

                                Le TEST se trouvant  l'INTRIEUR du groupe QUANTIFI, il est VRIFI  CHAQUE POSITION
                                                                        
                                    de la CHANE ( 1, 2, 3... JUSQU' n )
                                                   

                                DS que le TEST n'est PLUS vrifi,  une POSITION x donne :
                                                           

                                    - Si x > 1  la CHANE des x - 1 PREMIERS caractres VRIFIE la STRUCTURE ci-dessus
                                                                     

                                          => CHAQUE POSITION, de 1  x-1, de la RegExp DOIT satisfaire le TEST
                                                                                

                                    - Si x = 1  le POINTEUR du MOTEUR de RECHERCHE est AVANC d'une POSITION et on
                                                                
                                          RELANCE la recherche de la STRUCTURE
                                                              

                                          => La LONGUEUR de la chane MAXIMUM vaut,  prsent, n - 1 CARACTRES
                                                                                


                        Soit la chane SUJET  'AAABBB', constituant l'UNIQUE ligne d'un FICHIER
                                                           

                            - [A-Z][A-Z]           correspond aux caractres en POSITION 1 et 2         soit 'AA'
                                                                                              
                            - (?:([A-Z])Test){1,4} correspond aux caractres en POSITION 3, 4, 5, et 6, soit 'ABBB'
                                                                             
                            - Quand le POINTEUR est APRS la POSITION 3, le LOOKBEHIND (?<=...) dplace FICTIVEMENT
                                                                   
                                  le POINTEUR de TROIS caractres en ARRIRE, soit JUSTE AVANT le PREMIER caractre
                                                                       
                            - Le LOOKAHEAD, interne, (?!\1\1\1) VRIFIE que le 3me CARACTRE (A) n'est PAS prsent
                                                                       
                                  aux POSITIONS 1 et 2. Comme c'est le CAS, le TEST n'est donc PAS VRIFI et la
                                                                                         
                                  CHANE 'ABBB', aprs les DEUX caractres 'AA', NE convient PAS
                                                                       

                            - Le POINTEUR de recherche AVANCE d'une POSITION  =>  la chane SUJET devient 'AABBB'
                                                                         

                                  - [A-Z][A-Z]           correspond aux caractres en POSITION 1 et 2      soit 'AA'
                                                                                                 
                                  - (?:([A-Z])Test){1,4} correspond aux caractres en POSITION 3, 4, et 5  soit 'BBB'
                                                                                   
                                  - TEST si les 3 caractres, aux POSITIONS 1, 2 et 3, ne sont PAS TOUS GAUX => OK
                                                                                         
                                  - TEST si les 3 caractres, aux POSITIONS 2, 3 et 4, ne sont PAS TOUS GAUX => OK
                                                                                         
                                  - TEST si les 3 caractres, aux POSITIONS 3, 4 et 5, ne sont PAS TOUS GAUX => KO
                                                                                         

                                        => SEULS, les 2 PREMIERS caractres B conviennent pour (?:([A-Z])Test){1,4}
                                                                         

                            DONC, pour la chane SUJET  'AAABBB', la RegExp [A-Z][A-Z](?:([A-Z])(?<=(?!\1\1\1)...)){1,4}
                                                                 
                                trouve la chane totale 'AABB'
                                                         


                    REMARQUES :
                    

                        - C'est TOUJOURS l'ensemble ( LOOKAROUND(S) + CARACTRE ) qui est SUIVI du QUANTIFICATEUR,
                                                         
                              et NON le caractre SEUL !
                                 


                        - On peut, aussi, dans ces 3 CAS, transformer le groupe NON CAPTURANT en un GROUPE de CAPTURE
                                                                                  
                              il est alors NCESSAIRE d'utiliser la RFRENCE ARRIRE \2 ( au LIEU de \1 )
                                                          

                                  [A-Z][A-Z](([A-Z])(?<=(?!\2\2\2)...)){1,4}
                                  
                                  [A-Z][A-Z]((?<=(?!([A-Z])\2\2)..)[A-Z]){1,4}
                                  
                                  (([A-Z])(?!\2\2)){1,4}[A-Z][A-Z]
                                  


            EXEMPLES GNRAUX :
            

                ^[^#\r\n]*\K#(?!.*#) trouve le SEUL caractre #, de TOUTE ligne d'un FICHIER, comportant 1 SEUL DISE
                                                                     


                ATTENTION :
                

                    La forme  ^[^#\r\n]*\K#[^#\r\n]*$  est aussi CORRECTE, mais n'aurait PAS le MME effet, car TOUT
                                                                                     
                        caractre, situ APRS le DISE, serait, galement SLECTIONN
                                                                 


                    La forme  ^.*?\K#(?!.*#), qui semble IDENTIQUE, est, par contre, INCORRECTE
                                                             

                        En effet, l'ide INITIALE est :  Trouve un 1ER DISE d'une LIGNE, NON SUIVI d'un AUTRE DISE,
                                                                               
                            soit les RegExp  ^.*?\K#  d'une part  et  (?!.*#)  d'autre part
                                                               

                        MAIS, en fait, cette RegExp signifie :  Trouve un DISE, NON SUIVI d'un AUTRE DISE et SPAR
                                                                            
                            du DBUT de ligne, par des caractres QUELCONQUES, AUTRES que 'FIN de LIGNE', DONT le DISE !
                                                             

                                => La LIGNE peut donc contenir, CONTRAIREMENT  l'hypothse, PLUSIEURS caractres '#' !
                                                                                



                (?s)/\*.*?\*/  trouve TOUT texte de COMMENTAIRE d'un fichier, en langage 'C', y COMPRIS ses DEUX
                                                
                    bornes '/*' et '*/', et ce :
                                  

                        - MME si un COMMENTAIRE ne contient AUCUN texte
                                              
                        - MME si PLUSIEURS commentaires SUCCESSIFS sur une MME ligne
                                                     
                        - MME si un COMMENTAIRE s'tend sur PLUSIEURS lignes
                                              

                              NOTE :
                              

                                  Les commentaires NE doivent PAS tre IMBRIQUS   (  /*abc.../*123...789*/...xyz*/  )
                                                         


                abcd(?!.*abcd) trouve une CHANE 'abcd' qui n'est PAS suivie d'une AUTRE CHANE 'abcd'
                                                       

                    => Cette expression RGULIRE trouve donc la DERNIRE occurrence 'abcd' de CHAQUE ligne
                                                             

                    NOTE : La RegExp .*abcd semble remplir la MME fonction, mais, en fait, elle slectionne TOUT le
                                                                                               
                               texte, ENTRE le DBUT de la LIGNE et la DERNIRE chane  'abcd' de la LIGNE
                                                         



                (?<=tic)(?=tac) dans la partie RECHERCHE et la CHANE '-' dans la partie REMPLACEMENT, AJOUTE un
                                                              
                    TIRET (-) entre les DEUX mots 'tic' et 'tac' de la CHANE 'tictac'
                                                             

                    NOTES :
                    

                        Bien que le GABARIT, rsultant des DEUX ASSERTIONS, est, en fait, une chane VIDE '', le MOTEUR
                                                                                    
                            de RECHERCHE parcoure, CARACTRE par CARACTRE, l'ensemble des POSITIONS de la chane SUJET !
                                                                                  

                        Le REMPLACEMENT n'est EFFECTIF QUE si l'on clique sur le bouton " Remplacer tout " et NON sur
                                                                                    
                            bouton " Remplacer "
                                     



                La RECHERCHE de TOUS les mots de 6  12 LETTRES, contenant l'UNE des CHANES 'cat', 'dog' ou 'mouse'
                                              
                    ncessite DEUX expressions RGULIRES :
                              

                        \b\w{6,12}\b               ( MOT de 6  12 LETTRES )
                                                
                        \b\w*(cat|dog|mouse)\w*\b  ( MOT contenant l'UNE des CHANES 'cat' , 'dog' ou 'mouse' )
                                                                     

                    L'utilisation d'un LOOKAHEAD POSITIF permet de COMBINER les DEUX RegExp
                                                  

                        (?=\b\w{6,12}\b)\b\w*(cat|dog|mouse)\w*\b
                        

                        Cette RegExp peut, nanmoins, tre OPTIMISE :
                                                     

                            - Les 3me et 4me ASSERTIONS \b sont INUTILES car les 2 PREMIRES dterminent DJ un MOT
                                                 

                                  =>  (?=\b\w{6,12}\b)\w*(cat|dog|mouse)\w*
                                      

                            - La RECHERCHE de 'cat', 'dog' ... est INUTILE, APRS le 9me caractre du mot ENGLOBANT
                                                                    

                                  =>  (?=\b\w{6,12}\b)\w{0,9}(cat|dog|mouse)\w*
                                      

                            - La 1re ASSERTION \b, de longueur NULLE, peut tre place en DEHORS du LOOKAHEAD
                                                                     

                                  => Finalement, l'expression OPTIMISE est  \b(?=\w{6,12}\b)\w{0,9}(cat|dog|mouse)\w*
                                                                    



                L'expression RGULIRE ^$ cherche TOUTES les LIGNES VIDES d'un fichier
                                                
                    Si la partie REMPLACEMENT contient une CHANE, celle-ci sera INSRE dans TOUTES les lignes VIDES
                                                                     

                        NOTE :
                        
                            Bizarrement, si la partie REMPLACEMENT est VIDE, les lignes VIDES ne sont PAS SUPPRIMES !
                                                                            

                                SOLUTION :  MARQUER les lignes VIDES lors de la RECHERCHE et utiliser la commande N++
                                                
                                                " Supprimer les lignes marques "
                                                  



                Soit , reprsentant le GABARIT d'une expression RGULIRE, pouvant tre une SIMPLE chane, 
                                                                            
                    CHERCHER dans les LIGNES d'un fichier. Alors, si AUCUNE chane de REMPLACEMENT n'est indique :
                                                               

                        (?=.*?).+\R?   ou   .*?.*\R?  supprime TOUTES les LIGNES, satisfaisant le gabarit 
                                                             
                        ^(?!.*?).+\R?  supprime TOUTES les lignes NON VIDES, NE satisfaisant PAS le gabarit 
                                         

                            NOTES :
                            

                                Exemples de GABARIT  possibles :  abc   ,  \d+   ,  [123XYZ]   ,  a.*?z  ......
                                            


                                \R?  reprsente le, ou les, caractre(s) de 'FIN de LIGNE', ventuellement ABSENT
                                                                                            
                                    ( CAS de la DERNIRE ligne d'un fichier )
                                                


                                Quand on TESTE l'ABSENCE du gabarit , il faut AJOUTER l'ANCRE ^ pour BIEN chercher
                                                   
                                     le gabarit DEPUIS le PREMIER caractre des LIGNES. En effet, si  ne se trouve,
                                                                              
                                     par exemple, qu'UNE FOIS, au MILIEU d'une ligne, TOUTES les positions SUIVANTES
                                                                                             
                                     satisfont le GABARIT (?!.*?), faisant croire,  TORT, que la ligne ne contient
                                                                    
                                     PAS le GABARIT  !
                                     


                                Le GABARIT  ^(?!.*?).*\R?  cens reprsenter TOUTES les lignes VIDES ou NON, NE
                                                                  
                                    satisfaisant PAS le gabarit , n'est PAS FIABLE, suite au BUG de \R ( Voir 
                                                                        
                                    caractres JOKER )  =>  Ce gabarit est  VITER !
                                                       



                (?=.*?\bcat\b.*?\bdog\b.*?\bmouse\b).+  cherche TOUS les caractres d'une LIGNE, contenant les TROIS
                                          
                    mots 'cat', 'dog' et 'mouse', dans cet ordre EXACT
                                                

                (?=.*?\bcat\b)(?=.*?\bdog\b)(?=.*?\bmouse\b).+ cherche TOUS les caractres d'une LIGNE, contenant les
                         
                    TROIS mots 'cat', 'dog' et 'mouse', dans n'IMPORTE QUEL ordre, MME RPTS
                                             

                ^(?=.*?\bcat\b)(?!.*?\b(dog|mouse)\b).* cherche TOUTES les lignes avec le mot 'cat', au MOINS 1 FOIS,
                                          
                    mais PAS le mot 'dog', NI le mot 'mouse'
                            



                DEF(?=.*999) trouve TOUTE chane 'DEF' si le RESTE de la ligne COURANTE contient la CHANE '999'
                                                                           
                DEF(?!.*999) trouve TOUTE chane 'DEF' si le RESTE de la ligne COURANTE NE contient PAS la CHANE '999'
                                                                           



                (?<=\d{3})(?<!999)abc cherche TOUTE chane 'abc', PRCDE de 3 CHIFFRES et, de plus, DIFFRENTS de '999'
                                                        

                (?<=\d{3}...)(?<!999)abc cherche TOUTE chane 'abc', PRCDE de 6 caractres, dont les TROIS PREMIERS
                                                                
                    sont des CHIFFRES et les TROIS DERNIERS forme une chane DIFFRENTE de '999'
                                                



                Si CHAQUE ligne d'un FICHIER comporte un BLOC de texte, ENTRE les SEULES BALISES 'DEB' et 'FIN',
                                                              
                    QUELLE QUE SOIT la POSITION des BALISES, dans la LIGNE, comme ci-DESSOUS, alors :
                                          

                            DEB.................................FIN
                            .......... DEB...........ABC............FIN............
                            DEB........................FIN................
                            ..................................DEB....................FIN
                            DEB.......ABC.......................FIN
                            ..................................DEB........ABC.........FIN
                            DEB........ABC.............FIN................
                            .......... DEB..........................FIN............


                        .*?DEB(.*?ABC.*?)FIN.*      en partie RECHERCHE   et   \1  en partie REMPLACEMENT   ( CAS 1 )
                                                                 
                        .*?DEB(((?!ABC).)*?)FIN.*   en partie RECHERCHE   et   \1  en partie REMPLACEMENT   ( CAS 2 )
                                                              


                            permet de REMPLACER CHAQUE ligne, par le SEUL texte, situ ENTRE les 2 BALISES, NON INCLUSES
                                                                     

                                - si ce BLOC de texte CONTIENT         la CHANE 'ABC'  ( CAS 1 )
                                                                           
                                - si ce BLOC de texte NE contient PAS  la chane 'ABC'  ( CAS 2 )
                                                                    


                        NOTE :
                        

                            Si, dans le Cas 2, la partie  ((?!ABC).)*?  est RCRITE sous la FORME  (.(?!ABC))*?
                                                                                   
                                LE RSULTAT est lgrement DIFFRENT   ( CAS 3 )
                                                     

                                    En effet, si la CHANE 'ABC' est place JUSTE APRS la BALISE 'DEB', le MOTEUR de
                                                                                     
                                        RECHERCHE considre,  TORT, la CHANE '...DEBABC....FIN...' CORRECTE !
                                                                            

                                       CAS 3 : APRS la POSITION du 'A' de 'ABC', il y a une CHANE 'ABC' ?  NON  => OK
                                                                                                       
                                       CAS 2 : APRS la POSITION du 'B' de 'DEB', il y a une CHANE 'ABC' ?  OUI  => KO
                                                                                                       



                (?<=AB|z{2}|[ \t].|\d\d|[[:cntrl:]]\u)Notepad++  cherche TOUTES les CHANES 'Notepad++'
                                        

                    -       qui sont PRCDES de la chane 'AB'
                                                             
                    -  ou   qui sont PRCDES de 2 caractres 'z'
                                                  
                    -  ou   qui sont PRCDES de 1 ESPACE ou TABULATION, suivie d'un caractre QUELCONQUE
                                                                          
                    -  ou   qui sont PRCDES de 2 CHIFFRES
                                                  
                    -  ou   qui sont PRCDES de 1 caractre de CONTRLE, suivi d'1 lettre MAJUSCULE
                                                            

                        RAPPEL : TOUTES les ALTERNATIVES d'un LOOKBEHIND sont de MME longueur ( Ici, 2 CARACTRES )
                                                  



                Soit les DIFFRENTS changements  effectuer quand un CHIFFRE C ou une LETTRE L sont SPARS d'un
                                                                           
                    AUTRE chiffre C ou LETTRE L, par une ESPACE, une VIRGULE ou une COMBINAISON des DEUX,
                                            

                        ( On suppose utiliser le format ANGLAIS des NOMBRES : 123,456,789.12 )
                                                 

                       2    C,L     =>     C, L    Insertion ESPACE, APRS la VIRGULE
                       2    L,C     =>     L, C    Insertion ESPACE, APRS la VIRGULE
                       2    L,L     =>     L, L    Insertion ESPACE, APRS la VIRGULE
                            C,C     =>             Ne RIEN faire

                            C L     =>     C L     Ne RIEN faire
                            L C     =>     L C     Ne RIEN faire
                            L L     =>     L L     Ne RIEN faire
                   1        C C     =>     CC      Suppression ESPACE entre DEUX chiffres

                            C, L    =>     C, L    Ne RIEN faire
                            L, C    =>     L, C    Ne RIEN faire
                            L, L    =>     L, L    Ne RIEN faire
                   1        C, C    =>     C,C     Suppression ESPACE, APRS la VIRGULE, dans un CHIFFRE

                   1   2    C ,L    =>     C, L    Suppression ESPACE, AVANT VIRGULE  puis  Insertion ESPACE, APRS
                   1   2    L ,C    =>     L, C    Suppression ESPACE, AVANT VIRGULE  puis  Insertion ESPACE, APRS
                   1   2    L ,L    =>     L, L    Suppression ESPACE, AVANT VIRGULE  puis  Insertion ESPACE, APRS
                   1        C ,C    =>     C,C     Suppression ESPACE, AVANT VIRGULE, dans un CHIFFRE


                        Ces 16 CAS possibles peuvent se RSUMER en DEUX propositions UNIQUEMENT :
                                                                

                            - SUPPRIMER le caractre ESPACE si :
                                            

                                  (((CHIFFRE ,) ou CHIFFRE ) AVANT ET CHIFFRE APRS ) OU si une VIRGULE APRS
                                  

                                    => RECHERCHE de l'expression RGULIRE  \d,?\K (?=\d)| (?=,)
                                                                   
                                    => REMPLACEMENT par la chane VIDE
                                                      


                            - INSERTION du caractre ESPACE, APRS la VIRGULE, si :
                                            

                                  ( PAS SUIVIE d'un ESPACE ) ET ( NON PRCDE OU NON SUIVIE) d'un CHIFFRE
                                  

                                    => RECHERCHE de l'expression RGULIRE  ,(?! )((?<!\d,)|(?!\d))
                                                                   
                                    => REMPLACEMENT par LA CHANE  ', '
                                                        

                            NOTES :
                            

                                Dans la 1RE opration de RECHERCHE-REMPLACEMENT, il y a DEUX recherches INDPENDANTES
                                                               
                                    du caractre ESPACE :
                                                 

                                        - la PREMIRE avec la FORME \K et un LOOKAROUND POSITIF
                                                           
                                        - la SECONDE  avec un LOOKAHEAD POSITIF
                                                              

                                Dans la 2ME opration de RECHERCHE-REMPLACEMENT, il y a recherche UNIQUE d'une VIRGULE :
                                                               

                                    - qui SATISFAIT un LOOKAHEAD NGATIF
                               et              
                                    - qui SATISFAIT un des DEUX LOOKAROUNDS NGATIFS de l'ALTERNATIVE
                                                        


                            REMARQUES :
                            

                                La PREMIRE opration de RECHERCHE-REMPLACEMENT pourrait, en THORIE, s'crire :
                                                               
                                        (?<=\d,?) (?=\d)| (?=,)
                                        

                                    Cependant, comme la CHANE '\d,?' n'a PAS UNE longueur FIXE, l'utilisation d'un
                                                                      
                                        LOOKBEHIND n'est PAS autorise  => ERREUR : Invalid regular expression
                                                             

                                    MAIS, comme il s'agit d'un LOOKBEHIND POSITIF, on peut utiliser la forme
                                                           
                                        QUIVALENTE  \K  , qui permet l'utilisation de CHANES de longueur NON FIXE
                                                                       


                                La 2ME opration de RECHERCHE-REMPLACEMENT pourrait, galement, s'crire, en PERL :
                                                                                    

                                    (?<=,            #   APRS une VIRGULE,
                                       (?!           #     Si PAS :
                                          (?<=\d,)   #           un CHIFFRE, AVANT la VIRGULE
                                                     #       ( ET implicite )
                                          (?=\d)     #           un CHIFFRE  APRS la VIRGULE
                                       |             #       OU
                                          (?= )      #           un ESPACE   APRS la VIRGULE
                                       )
                                    )
                                                     #     alors :
                                                     #
                                    ", "             #       Mettre un ESPACE, APRS CETTE VIRGULE




10) Blocs CONDITIONNELS :
    

        Les Blocs CONDITIONNELS permettent la RECHERCHE de gabarit(s) DIFFRENTS, selon qu'une CONDITION est
                                                         
            RALISE, ou NON,  la position COURANTE du POINTEUR de recherche
                            


        Les DEUX principales SYNTAXES d'un Bloc CONDITIONNEL sont :
                               

            (?CONDITIONGabarit_si_VRAI)
            

            (?CONDITIONGabarit_si_VRAI|Gabarit_si_FAUX)
            


            dans lesquelles :


                Gabarit_si_VRAI est le GABARIT  RECHERCHER, si la CONDITION  t PRCDEMMENT ralise
                                       

                Gabarit_si_FAUX est le GABARIT  RECHERCHER, si la CONDITION n' PAS t PRCDEMMENT ralise
                                     

                CONDITION reprsente, au CHOIX :
                                

                    - (N)                          =  Nme GROUPE de CAPTURE, NON NOMM, cr PRCDEMMENT
                                                                       
                    - (<Nom>)  ou  ('Nom')         =  GROUPE de CAPTURE, NOMM 'Nom',    cr PRCDEMMENT
                                                            
                    - (?= .....)   ou  (?! .....)  =  ASSERTION utilisateur, de type LOOKAHEAD,  POSITIF ou NGATIF
                                                        
                    - (?<= .....)  ou  (?<!.....)  =  ASSERTION utilisateur, de type LOOKBEHIND, POSITIF ou NGATIF
                                                       
                    - (R)                          =  Rfrence RCURSIVE  TOUT le GABARIT ou  TOUT GROUPE de CAPTURE
                                                                      
                    - (Rn)                         =  Rfrence RCURSIVE au SEUL groupe de CAPTURE, NON NOMM, n
                                                                                    
                    - (R&Nom)                      =  Rfrence RCURSIVE au SEUL groupe de CAPTURE, NOMM 'Nom'
                                                                                 


                Pour CHACUNE de ces SYNTAXES, la CONDITION est VRAIE si  :
                                  

                    - le GABARIT, du GROUPE de CAPTURE indiqu,                            a t PRCDEMMENT ralis
                                                                           
                    - le GABARIT, de l'ASSERTION utilisateur,                              a t PRCDEMMENT ralis
                                                                     
                    - si un APPEL RCURSIF, au GABARIT de la rfrence RCURSIVE indique, a t PRCDEMMENT ralis
                                                                 


        La 3me et dernire SYNTAXE de bloc CONDITIONNEL est :
                        

            (?(DEFINE)Gabarit_si_VRAI)
            

                dans laquelle :


                    Gabarit_si_VRAI reprsente une SUITE de Groupes NOMMS, NE faisant PAS partie du GABARIT  CHERCHER
                                                 
                    (DEFINE) reprsente une CONDITION qui est TOUJOURS FAUSSE ( => JAMAIS ralise )
                                                   


            Cette SYNTAXE permet de DFINIR UN, ou PLUSIEURS, groupe(s) NOMM(S) dans la partie Gabarit_si_VRAI de
                                             
                la structure CONDITIONNELLE, qui ne fait JAMAIS partie du GABARIT de RECHERCHE, suite  la valeur 'FAUX'
                                                                             
                de la CONDITION (DEFINE), mais qui permet la RUTILISATION du (de ces) groupe(s) NOMM(S), par
                                                        
                RFRENCE(S) de GROUPE, dans le GABARIT lui-mme
                          

                    REMARQUE :
                    

                        Avec cette FORME, on peut donc DFINIR une BIBLIOTHQUE de groupes NOMMS, pouvant tre repris
                                                       
                            dans de NOMBREUX gabarits DIFFRENTS
                                    

                                Dans NOTEPAD++, cependant, la CRATION d'une expression RGULIRE, sur PLUSIEURS lignes,
                                                                                      
                                    tant IMPOSSIBLE, cette 3me FORME est de PEU d'intrt ! ( Voir EXEMPLE ci-aprs )
                                                                              


                        Le bloc CONDITIONNEL (DEFINE) est, en gnral, plac AVANT le GABARIT de RECHERCHE, mais ce
                                                        
                            n'est PAS OBLIGATOIRE
                                  


        NOTES :
        

            Si la CONDITION, de la structure CONDITIONNELLE, est un LOOKAHEAD, le MOTEUR de RECHERCHE testera la
                                                                
                partie Gabarit_si_VRAI ou la partie Gabarit_si_FAUX,  la MME position que le TEST du LOOKAHEAD,
                                                            
                constituant la CONDITION
                               


            Les structures CONDITIONNELLES ne constituent PAS, en soi, de GROUPES de CAPTURE. Donc, si les expressions
                                                        
                RGULIRES  Gabarit_si_VRAI  et/ou  Gabarit_si_FAUX  sont dsires, il faudra placer une PAIRE de
                                                                           
                PARENTHSES autour de la PARTIE concerne  ou  de la structure CONDITIONNELLE toute ENTIRE
                                                    

                    Les DEUX syntaxes deviennent alors :
                        

                        (?CONDITION(Gabarit_si_VRAI))   ou   ((?CONDITIONGabarit_si_VRAI))
                                

                        (?CONDITION(Gabarit_si_VRAI)|Gabarit_si_FAUX)
                        
                   ou
                        (?CONDITIONGabarit_si_VRAI|(Gabarit_si_FAUX))
                        
                   ou
                        ((?CONDITIONGabarit_si_VRAI|Gabarit_si_FAUX))
                        



            Si la partie  Gabarit_si_VRAI  et/ou  la partie Gabarit_si_FAUX contiennent des ALTERNATIVES, placer
                                                              
                LA ( ou les DEUX ) partie(s) concernes, ENTRE PARENTHSES
                                       

                    Les DEUX syntaxes deviennent alors :
                        

                        (?CONDITION(Gabarit_1|Gabarit_2||Gabarit_3|.....))

                        (?CONDITION(Gabarit_1|Gabarit_2||Gabarit_3|.....)|(Gabarit_4|Gabarit_5|Gabarit_6|.....))
                         


        IMPORTANT :
        

            Pour un fonctionnement CORRECT des structures CONDITIONNELLES, qui font RFRENCE  un GROUPE de CAPTURE,
                                                              
                NOMM ou NON, PRCDEMMENT dfini, les 3 SYNTAXES (n), (<Nom>) et ('Nom') DEVRONT concerner un groupe
                        
                de CAPTURE NON OPTIONNEL
                           

                    En effet, un groupe OPTIONNEL est TOUJOURS considr 'VRAI' par une structure CONDITIONNELLE,
                                                                 
                        puisqu'il signifie :  Groupe EXISTANT et VRIFI  ou  groupe NON EXISTANT  !!
                                                                  

                    SOLUTION :
                    

                        Transformer le groupe OPTIONNEL en un groupe NON OPTIONNEL, mis entre PARENTHSES,
                                                              
                            et SUIVI du QUANTIFICATEUR ?
                               

                                Dans ce cas, si le groupe NON OPTIONNEL :
                                                          

                                   - est trouv       =>  le groupe est DFINI        et  la CONDITION est VRAIE
                                                                                    
                                   - n'est PAS trouv =>  le groupe n'est PAS DFINI  et  la CONDITION est FAUSSE
                                                                         

                EXEMPLES :
                

                    La forme NON OPTIONNELLE (\*{0,5}) sera RCRITE sous la FORME (\*{1,5})?
                                                  

                        Dans ce CAS, la CONDITION (1) est bien :
                                        

                            - VRAIE,  si une CHANE de 1  5 ASTRISQUES, au PLUS, est trouve
                                                       
                            - FAUSSE, si AUCUN caractre ASTRISQUE n'est trouv
                                              

                        NOTE :
                        

                            La FORME, presque SIMILAIRE, (\*){0,5}, est OPTIONNELLE, mais le GROUPE 1 vaut \*, qui
                                                                                          
                                est bien une forme NON OPTIONNELLE
                                               

                                    Dans ce CAS, la CONDITION (1) signifie :
                                                    

                                        - VRAIE,  si 1 ASTRISQUE, au MOINS, a pu tre trouve
                                                     
                                        - FAUSSE, si AUCUN caractre ASTRISQUE n'a pu tre trouv
                                                          


                    La forme NON OPTIONNELLE (\w*) sera RCRITE sous la FORME (\w+)?
                                                   

                        Dans ce CAS, la CONDITION (1) est bien :
                                        

                            - VRAIE,  si UN, ou PLUSIEURS, caractres de MOT ont pu tre trouvs
                                                    
                            - FAUSSE, si AUCUN caractre de MOT n'a pu tre trouv
                                   




        EXEMPLES de structures CONDITIONNELLE :
        

            (?(?=.*[a-z])\d{2}-[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2}) cherche :
            

                - une SUITE de 2 CHIFFRES, puis 3 lettres MINUSCULES, et, enfin, 2 CHIFFRES, spars par des TIRETS,
                                                                     
                    SI la ligne COURANTE comporte AU MOINS 1 lettre MINUSCULE
                                                

                - une SUITE de 2 CHIFFRES, rpte TROIS fois, et spare par des TIRETS
                                                                   
                      SI la ligne COURANTE NE contient PAS de lettre MINUSCULE
                                                    

                      Dans cette structure CONDITIONNELLE :
                                           

                          - la CONDITION est un LOOKAHEAD POSITIF   (?=.*[a-z])
                                          
                          - la partie Gabarit_si_VRAI  est          \d{2}-[a-z]{3}-\d{2}   ( Forme JJ-mmm-AA )
                                                                
                          - la partie Gabarit_si_FAUX  est          \d{2}-\d{2}-\d{2}      ( Forme JJ-MM-AA )
                                                                   


            ^(?<Guy>\()?[^()\r\n]+(?(<Guy>)\)|[^()])$  ( avec groupe NOMM < Guy>, OPTIONNEL )
                              

            ^(\()?[^()\r\n]+(?(1)\)|[^()])$            ( avec groupe NON NOMM,    OPTIONNEL )
                                           

                trouve l'INTGRALIT des LIGNES d'un fichier :
                         

                    - sans PARENTHSE
                      
                    - avec DEUX PARENTHSES, UNIQUEMENT, en DBUT ( APRS \n ) et FIN de ligne ( AVANT \r )
                                                 

                          Dans cette structure CONDITIONNELLE :
                                               

                              - la CONDITION est une RFRENCE au GROUPE  (<Guy>)  ou  (1) , soit la RegExp  (\()
                                                                      
                              - la partie Gabarit_si_VRAI est  \)     PARENTHSE,  la FIN
                                                             
                              - la partie Gabarit_si_FAUX est  [^()]  Caractre DIFFRENT de PARENTHSE,  la FIN
                                                                   

                NOTE :
                

                    SANS structure CONDITIONNELLE, le GABARIT peut s'crire avec l'ALTERNATIVE :
                                                      

                        ^([^()\r\n]+|\([^()\r\n]+\))$, qui recherche, ENTRE \n et \r :
                                         

                            - soit une SUITE de caractres NON PARENTHSE, et AUTRES que les DEUX caractres \n et \r
                                                                                    
                            - soit une SUITE de caractres NON PARENTHSE, et AUTRES que les DEUX caractres \r et \n ,
                                                                                    
                                  INCLUSE dans un COUPLE de PARENTHSES
                                           


            ^(\w+)(\w+)?(?(2)\g2\g1|\g1)$  trouve TOUS les mots d'une LISTE,  raison de UN mot par LIGNE, dont la
                                               
                STRUCTURE correspond  l'UNE des DEUX formes GLOBALES  'XYYX'  ou  'XX', comme ci-DESSOUS :
                                                           

                    'toto'  ,  'aBBa'  ,  '55'  ,  'THEVENOT_Guy_GuyTHEVENOT'  ,  'couscous'  ,  'BeririBe' , etc.
                                                        

                        Dans cette structure CONDITIONNELLE :
                                             

                            - la CONDITION est une RFRENCE au GROUPE 2  (2) , soit la 2me RegExp  \w+
                                                                
                            - la partie Gabarit_si_VRAI est  \g2\g1   ( Forme YX )
                                                         
                            - la partie Gabarit_si_FAUX est  \g1      ( Forme X  )
                                                            

                NOTE :
                

                    SANS structure CONDITIONNELLE, la RegExp peut s'crire avec un groupe NON CAPTURANT de 2 ALTERNATIVES
                                                                 

                        ^(?|(\w+)(\w+)\2\1|(\w+)\1)$ ,  qui recherche, ENTRE \n et \r,
                                           

                            - (\w+)(\w+)\2\1   c'est  dire une FORME de type 'XYYX'
                                                                 
                            - (\w+)\1          c'est  dire une FORME de type 'XX'
                                                                        


            ^((From|To)|Subject): ((?(2)\w+@\w+\.[a-z]+|.+))  cherche :
            

                - l'UNE des CHANES 'From', 'To' ou 'Subject' en DBUT de ligne, SUIVIE de ': '
                                                              
                - une adresse E-MAIL VALIDE de l'EXPDITEUR ou du DESTINATAIRE    ( Forme '~~~~~~~@~~~~~~~~.~~~' )
                                           
                - enfin, le SUJET du MAIL              ( Suite NON VIDE de caractres, DIFFRENTS de \n, \f et \r )
                                                            

                      Dans cette structure CONDITIONNELLE :
                                           

                          - la CONDITION est une RFRENCE au GROUPE 2  (2)  soit la RegExp  From|To
                                                            
                          - la partie Gabarit_si_VRAI est  \w+@\w+\.[a-z]+   ( Adresse E-MAIL )
                                                         
                          - la partie Gabarit_si_FAUX est  .+                ( Texte NON VIDE )
                                                                    

                      NOTES :
                      

                          L'ENTTE est mmorise dans le GROUPE 1  ( UNE des TROIS chanes 'From' , 'To' ou 'Subject' )
                                                                            
                          La structure CONDITIONNELLE est ENTOURE de PARENTHSES pour mmoriser, dans le GROUPE 3 :
                                                                     

                              - soit l'adresse E-MAIL de l'EXPDITEUR ou du DESTINATAIRE  \w+@\w+\.[a-z]+
                                                              
                              - soit le SUJET du MAIL  .+
                                          


            ^(a)?(?(1)a|b)+$ cherche les chanes SUJET suivantes,  raison d'UNE par LIGNE :
                                                        

                - une SUITE de lettres 'a' MINUSCULES, si une lettre MINUSCULE 'a' EXISTE en DBUT la LIGNE
                                                           
                - une SUITE de lettres 'b' MINUSCULES, si PAS de lettre 'a' MINUSCULE     en DBUT de LIGNE
                                                              

                      Dans cette structure CONDITIONNELLE :
                                           

                          - la CONDITION est une RFRENCE au GROUPE 1  (1)  soit 'a'
                                                  
                          - la partie Gabarit_si_VRAI est  'a'
                                             
                          - la partie Gabarit_si_FAUX est  'b'
                                             


            (?(DEFINE)(?<Octet>25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))\b(?&Octet)(\.(?&Octet)){3}\b  trouve TOUTE adresse IPv4
                     

                Cette expression RGULIRE est compose de DEUX parties :
                                                  

                    - un bloc CONDITIONNEL (?(DEFINE)(?<Octet>25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))
                               

                          qui ne fait PAS PARTIE du GABARIT, car la CONDITION (DEFINE) est TOUJOURS FAUSSE
                                                    
                          mais sert UNIQUEMENT  DFINIR le groupe de CAPTURE 'Octet' pour utilisation ULTRIEURE
                                                                              

                    - Le GABARIT de RECHERCHE  \b(?&Octet)(\.(?&Octet)){3}\b
                                        

                NOTES :
                

                    - L'emploi de groupes NOMMS, avec la structure CONDITIONNELLE (DEFINE), n'est PAS OBLIGATOIRE :
                                                              

                          => La FORME (?(DEFINE)(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))\b(?1)(\.(?1)){3}\b  est POSSIBLE
                                      


                    - Le GABARIT de RECHERCHE peut tre plac DEVANT la structure CONDITIONNELLE (?(DEFINE).....)
                                                               

                          => La FORME \b(?2)(\.(?2)){3}\b(?(DEFINE)(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)) est POSSIBLE
                                      

                                 REMARQUE :
                                 

                                     Le PREMIER groupe, commenant par \. , la RFRENCE de GROUPE doit tre (?2),
                                                                                 
                                         correspondant au DEUXIME groupe  25[0-5].........[1-9]?\d
                                                                   


                    - L'emploi d'une RFRENCE ARRIRE,  la place d'une RFRENCE de GROUPE, est IMPOSSIBLE avec la
                                                              
                       structure CONDITIONNELLE  (?(DEFINE)......)
                                   


            \b(?&N1)\.(?&N2)\.(?&N3)\.(?&N4)\b(?(DEFINE)(?<N1>25[0-5])(?<N2>2[0-4]\d)(?<N3>1\d\d)(?<N4>[1-9]?\d))
            
      ou
            \b(?1)\.(?2)\.(?3)\.(?4)\b(?(DEFINE)(25[0-5])(2[0-4]\d)(1\d\d)([1-9]?\d))   ( SANS groupe NOMM )
                         


                trouve TOUTE adresse IPv4, tels que :
                       

                    250  <=  1er  Octet  <=  255
                    200  <=  2me octet  <=  249
                    100  <=  3me Octet  <=  199
                    0    <=  4me Octet  <=  99   ( SANS 0 NON significatif )
                                                         



11) PRIORITS des OPRATEURS :
    

        Les diffrents OPRATEURS, AUTRES que les caractres LITTRAUX et le JOKER . , sont lists ci-DESSOUS, par
                                                                   
            ordre de PRIORIT DCROISSANTE, de la PLUS GRANDE  la PLUS PETITE :
                                   


                1 - les CLASSES de type 'POSIX'          [:   :]  ,  [.   .]  ,  [=   =]
                                                              
                2 - le symbole d'CHAPPEMENT             \
                                              
                3 - les LISTES entre CROCHETS            [   ]  ,  [^   ]
                                                      
                4 - les RFRENCES ARRIRE               \g   ou   \k    SUIVIE de    N  ,  {   }  ,  <   >  ou  '   '
                                                                                           
                4 - les RFRENCES de GROUPE             (?N)  ,  (?&   )  ,  (?P>   )
                                                             
                5 - le GROUPEMENT entre PARENTHSES      (   )  ,  (?   )
                                                    
                6 - les symboles de DUPLICATION          *  ,  +  ,  ?  ,  {n}  ,  {n,}  ,  {n,m}
                                                                       
                7 - la CONCATNATION IMPLICITE
                       
                8 - les symboles d'ANCRAGE               ^  ,  $
                                                       
                9 - le symbole d'ALTERNATION             |
                                              


            Exemples de PRCDENCE entre 2 OPRATEURS ADJACENTS :
                               


   Entre 1 et 2   [[=\=]]  reprsente le caractre ANTISLASH ( et NON la RegExp  [[==]] qui est INVALIDE )
                                                                 

                      ( la recherche d'un CROCHET OUVRANT ou FERMANT ou du signe GAL s'obtient par la RegExp  []=[] )
                                                                                     


   Entre 2 et 3   [\]0-9]  reprsente un CROCHET FERMANT ou un CHIFFRE ( et NON un ANTISLASH suivi de la CHANE '0-9]'
                                                                  
                      qui peut tre trouv avec l'expression RGULIRE  \\0-9] )
                                                                        


   Entre 3 et 4   (a)[\g1] reprsente UNE des 2 CHANES 'ag' ou 'a1', ( et NON la CHANE 'aa' :  GROUPE CAPTUR +
                                                                 
                      RFRENCE ARRIRE, qui peut tre trouv avec l'expression RGULIRE  (a)\g1 )
                                                                          


   Entre 4 et 5   (A)\g({1}) n'est PAS VALIDE, mais l'expression  RGULIRE (A)(\g{1}) est CORRECTE  ( la chane
                                                       
                      LITTRALE  'A\g{1}' peut tre trouve par l'expression RGULIRE A\\g\{1\} )
                                                                     


   Entre 5 et 6   (abc)+ reprsente la CHANE 'abcabc....abc' ( et NON la CHANE 'ab', SUIVIE d'une SUITE NON NULLE de
                                   
                      caractres 'c', qui peut tre trouv avec l'expression RGULIRE  abc+ )
                                                                                        


   Entre 6 et 7   abc+  reprsente la CHANE 'ab' SUIVIE d'une SUITE de lettres 'c' ( et NON la CHANE 'abcabc...abc'
                                                                      
                      qui peut tre trouve avec l'expression RGULIRE  (abc)+ )
                                                                         


   Entre 7 et 8   ^a?b reprsente l'UNE des CHANES 'ab' ou 'b' en DBUT de ligne ( et NON la CHANE 'ab' en DBUT de
                                                                          
                      ligne  ou  la CHANE 'b'  un endroit QUELCONQUE, qui peut tre trouv par l'UNE des DEUX expres-
                                                                                        
                      sion RGULIRES  (^a)?b  ou  ^ab|b )
                                             


   Entre 8 et 9   ^ab|cd$ reprsente 'ab' en DBUT ou 'cd' en FIN de ligne ( et NON les LIGNES formes des DEUX carac-
                                                                
                     tres 'ab' ou 'cd', qui peuvent tre trouves avec l'expression RGULIRE  ^(ab|cd)$  )
                                                                                            



12) MEILLEURE CONCORDANCE d'une expression RGULIRE :
    

        En POSITION p de la chane SUJET, La MEILLEURE CONCORDANCE d'une expression RGULIRE est la PREMIRE
                                                        
            CONCORDANCE trouve, la PLUS  GAUCHE ( la PLUS PROCHE de la POSITION p COURANTE, dans la chane SUJET ),
                                                       
              constitue de la MEILLEURE CONCORDANCE d'UN ou de PLUSIEURS des SOUS-ensembles du TABLEAU ci-aprs :
                                                     


                NOTES :
                

                    Les symboles RE, RE1 et RE2 reprsentent des expressions RGULIRES QUELCONQUES
                                                               

                    L'ENTIT 'Cond' reprsente la CONDITION d'une STRUCTURE CONDITIONNELLE et peut-tre, au CHOIX :
                                                               

                       - un LOOKAHEAD ou un LOOKBEHIND, POSITIF ou NGATIF
                                         
                       - un GROUPE de CAPTURE, NOMM ou NON
                                  
                       - une RFRENCE RCURSIVE, NOMME ou NON
                                   



    =================================================================================================================
    |        FORME        |                        La MEILLEURE CONCORDANCE de la FORME vaut :                         |
    =================================================================================================================

    -----------------------------------------------------------------------------------------------------------------
    |       RE1RE2        | La MEILLEURE concordance pour RE1 qui peut tre SUIVIE d'UNE concordance de RE2            |
    -----------------------------------------------------------------------------------------------------------------
    |       RE1|RE2       | La MEILLEURE concordance pour RE1, MME si UNE concordance de RE2 EXISTE    la POSITION p |
    |       RE1|RE2       | La MEILLEURE concordance pour RE2, SI AUCUNE   concordance de RE1 n'EXISTE  la POSITION p |
    -----------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------
    |       RE{n}         | EXACTEMENT n FOIS, la MEILLEURE concordance de RE                                          |
    -----------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------
    |       RE{n,}        | AU MOINS n FOIS,   la MEILLEURE concordance de RE et le MAXIMUM de FOIS possible           |
    -----------------------------------------------------------------------------------------------------------------
    |       RE{n,m}       | ENTRE n et m FOIS, la MEILLEURE concordance de RE et le MAXIMUM de FOIS possible           |
    -----------------------------------------------------------------------------------------------------------------
    |       RE?           | ENTRE 0 et 1 FOIS, la MEILLEURE concordance de RE et le MAXIMUM de FOIS possible           |
    -----------------------------------------------------------------------------------------------------------------
    |       RE*           | AU MOINS 0 FOIS,   la MEILLEURE concordance de RE et le MAXIMUM de FOIS possible           |
    -----------------------------------------------------------------------------------------------------------------
    |       RE+           | AU MOINS 1 FOIS,   la MEILLEURE concordance de RE et le MAXIMUM de FOIS possible           |
    -----------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------
    |       RE{n,}?       | AU MOINS n FOIS,   la MEILLEURE concordance de RE et le MINIMUM de FOIS ncessaire         |
    -----------------------------------------------------------------------------------------------------------------
    |       RE{n,m}?      | ENTRE n et m FOIS, la MEILLEURE concordance de RE et le MINIMUM de FOIS ncessaire         |
    -----------------------------------------------------------------------------------------------------------------
    |       RE??          | ENTRE 0 et 1 FOIS, la MEILLEURE concordance de RE et le MINIMUM de FOIS ncessaire         |
    -----------------------------------------------------------------------------------------------------------------
    |       RE*?          | AU MOINS 0 FOIS,   la MEILLEURE concordance de RE et le MINIMUM de FOIS ncessaire         |
    -----------------------------------------------------------------------------------------------------------------
    |       RE+?     (1)  | AU MOINS 1 FOIS,   la MEILLEURE concordance de RE et le MINIMUM de FOIS ncessaire         |
    -----------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------
    |       (?>RE)   (2)  | TOUJOURS la MEILLEURE concordance de RE, SANS essai SUPPLMENTAIRE de CONCORDANCE pour RE  |
    |                     | ( AUCUN BACKTRACKING n'a lieu dans RE, pour obtenir une CONCORDANCE de la RegExp COMPOSE )|
    -----------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------
    | (?=RE)  , (?=(RE))  | TOUJOURS la MEILLEURE concordance de RE,  COMPTER de la POSITION p, dans la chane SUJET  |
    -----------------------------------------------------------------------------------------------------------------
    | (?<=RE) , (?<=(RE)) | TOUJOURS la MEILLEURE concordance de RE, AVANT        la POSITION p, dans la chane SUJET  |
    -----------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------
    |       (?!RE)        | L'ABSENCE de concordance de RE,  COMPTER de la POSITION p, dans la chane SUJET           |
    -----------------------------------------------------------------------------------------------------------------
    |       (?<!RE)       | L'ABSENCE de concordance de RE, AVANT        la POSITION p, dans la chane SUJET           |
    -----------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------
    |    (?(Cond)RE)      | La MEILLEURE concordance de RE,  si la CONDITION Cond est VRAIE,   la POSITION p du SUJET |
    -----------------------------------------------------------------------------------------------------------------
    |  (?(Cond)RE1|RE2)   | La MEILLEURE concordance de RE1, si la CONDITION Cond est VRAIE,   la POSITION p du SUJET |
    |                     | La MEILLEURE concordance de RE2, si la CONDITION Cond est FAUSSE,  la POSITION p du SUJET |
    -----------------------------------------------------------------------------------------------------------------


                EXEMPLES :
                

                    (1)  BIEN voir la DIFFRENCE entre, par EXEMPLE, les DEUX expressions RGULIRES 'y+?' et 'y+?z'
                                                                             
                             avec la chane SUJET 'yyyyyzzz'


                         Dans le PREMIER cas : SEULE, UNE lettre MINUSCULE y est slectionne ( Minimum SUFFISANT )
                                                                            
                         Dans le SECOND cas  : la CHANE 'yyyyyz' est slectionne            ( Minimum NCESSAIRE )
                                                                                            


                    (2)  Bien voir la DIFFRENCE entre, par EXEMPLE, les 2 expressions RGULIRES 'a+ab' et '(?>a+)ab',
                                                                                    
                             avec la chane SUJET 'aaabbb'
                                                   

                         Dans le PREMIER cas : la CHANE 'aaab' est trouve car a+ reprsente 'aa' ( PAS le MAXIMUM )
                                                                                      

                         Dans le SECOND cas  : AUCUNE concordance est trouve, car AUCUN BACKTRACKING sur la PARTIE a+
                                                                          


                REMARQUE :
                

                    Le MOTEUR de RECHERCHE utilise, par DFAUT, les Expressions RGULIRES Compatibles PERL ( PCRE )
                                                           
                        Cependant, si le MOTEUR de RECHERCHE utilisait les Expressions RGULIRES tendues POSIX
                                                                     
                            ( POSIX ERE ), la MEILLEURE CONCORDANCE, pour une expression RGULIRE, serait alors
                                                            
                            DTERMINE selon l'ALGORITHME, communment appel ' The Leftmost-Longest Rule ',
                                                            
                            PLUS COMPLEXE, qui NE sera PAS explicit dans le cadre de ce MANUEL
                                                                 



13) Exemples SUPPLMENTAIRES :
    

        (^|(?<= ))(http://[\w.]+?)((?= )|$)  dans la partie RECHERCHE
                         

        <a href="\2">\2</a>                  dans la partie REMPLACEMENT
                                         


            cherche de la CHANE 'http://', SUIVIE d'une SUITE, NON NULLE de caractres de MOT ou du caractre POINT,
                                                                                      

                    - qui DBUTE  une ligne ou est PRCDE d'une ESPACE
                et                           
                    - qui TERMINE une ligne ou est SUIVIE   d'une ESPACE
                                            

            et la REMPLACE par le code HTML qui la change en un HYPERLIEN cliquable, comme indiqu ci-DESSOUS :
                                               

                http://site.com   devient   <a href="http://site.com">http://site.com</a>
                             

                REMARQUE :
                

                    Ne PAS utiliser le BOUTON " Remplacer " ( remplacement PAS  PAS ) mais, UNIQUEMENT, le
                                                               
                        BOUTON " Remplacer tout " ( remplacement GLOBAL )
                                                   

                            Ce BUG de Notepad++, survient lorsque la chane de RECHERCHE contient des LOOKAHEADS ou des
                                                                                                   
                                LOOKBEHINDS POSITIFS, c'est  dire les FORMES  (?=.....)  et  (?<=.....)
                                                                  

                                    ( Voir le CHAPITRE III, relative  la SYNTAXE des RegExp en zone de REMPLACEMENT )
                                                                               


                IMPORTANT :
                

                    Ne PAS utiliser les DEUX formes [ \n] et [ \r],  la place des 2 ASSERTIONS  (^|(?<= )) et ((?= )|$)
                                                                 

                        Suite  la MAUVAISE gestion des caractres 'FIN de LIGNE' de Notepad++, l'expression RGULIRE
                                                    
                            [\n ]Ch[ \r]  NE trouve PAS, en effet, TOUTES les occurrences de la CHANE Ch, CONTRAIREMENT
                                                                   
                             la FORME  (^|(?<= ))(Ch)((?= )|$) , qui recense bien TOUS les CAS !
                                                            

                    L'expression RGULIRE  ^ ?(Ch) ?$ recense, galement, TOUS les CAS, mais les ESPACES ventuels,
                                                                   
                        situs AVANT et APRS la CHANE Ch, font partie INTGRANTE des RSULTATS
                                                 


                NOTE :
                

                    On peut, aussi, utiliser un groupe NON CAPTURANT d'ALTERNATIVES qui montre les 4 CAS dsirs :
                                                                       

                        (?| (http://[\w.]+) |^(http://[\w.]+) | (http://[\w.]+)$|^(http://[\w.]+)$)  en partie RECHERCHE
                                    
                        <a href="\1">\1</a>  en partie REMPLACEMENT ( Grce au BLOC (?|..., CHACUN des cas = Groupe 1 )
                                                             


                    On peut, galement, utiliser un structure CONDITIONNELLE de type (DEFINE), qui MMORISE le GABARIT
                                                                    
                        http://[\w.]+ en tant que GROUPE 1. Celui-ci est repris, par RFRENCE de GROUPE dans le bloc
                                                                
                        NON CAPTURANT d'ALTERNATIVES qui le suit :
                        

                            (?(DEFINE)(http://[\w.]+))(?| ((?1)) |^((?1)) | ((?1))$|^((?1))$)  en partie RECHERCHE
                                        
                            <a href="\2">\2</a>  en partie REMPLACEMENT ( Groupe 2 est GAL au BLOC () entourant (?1) )
                                                        



        (?i)<(\h*[a-z0-9_-]*\h*>)(\R|\h)*<\h*/(?1) en partie RECHERCHE, et chane VIDE en partie REMPLACEMENT, SUPPRIME
                                            

            les blocs de TAGS HTML OUVRANTS-FERMANTS VIDES, c'est  dire JUXTAPOSS ou spars UNIQUEMENT par :
                                            

                  - des caractres BLANCS HORIZONTAUX : ESPACE, TABULATION ou \xA0
              ou                            
                  - des caractres 'FIN de LIGNE' ou assimils  : \r\n , \r , \n , \x0B , \f  et  \x85
                                                                        

              Chaque NOM, VENTUEL, de bloc, entre les BALISES < et >, est UNIQUEMENT compos de LETTRES, de CHIFFRES
                                                                      
                  et des DEUX caractres TIRET (-) et (_), ventuellement PRCDS et/ou SUIVIS de BLANCS HORIZONTAUX
                                                          

                  EXEMPLE :
                  

                      La chane SUJET  '123< td >    < / TD >456'  est TRANSFORME en  '123456'
                                                           

                  NOTE :
                  

                      Pour SUPPRIMER des BLOCS IMBRIQUS, on excutera PLUSIEURS fois le cycle de RECHERCHE-REMPLACEMENT
                                              



        (?x) (  (  (  [^(,)\r\n]  )*  \(  (  [^()\r\n]  |  (?2)  )*  \)  (?3)*  )  |  (?3)+  )  ,?  en partie RECHERCHE
                    
            et  \r\n$1  en partie REMPLACEMENT,
                            

            CHANGE, dans des lignes, comportant des PARENTHSES IMBRIQUES, TOUTE VIRGULE du PLUS HAUT niveau ( soit
                                                    
                HORS PARENTHSES ) par un PASSAGE  la  ligne SUIVANTE
                                       

                    EXEMPLE :
                    

                        a,b,(c,d)f2,op3(e,(op5(h,op6(k,l)f6)f5,g)f4)f3,op7(op 8(t,u),s)f8,de,op9(y,z),op10(g,op11(t,e)h)
                        

                            est MODIFI en :
                                
                                                a
                                                b
                                                (c,d)f2
                                                op3(e,(op5(h,op6(k,l)f6)f5,g)f4)f3
                                                op7(op 8(t,u),s)f8
                                                de
                                                op9(y,z)
                                                op10(g,op11(t,e)h)


                    NOTES :
                    

                        l'OPTION (?x) permet, pour une MEILLEURE visibilit, de SPARER les DIFFRENTS blocs d'une
                                                 
                            expression RGULIRE, par des ESPACES, qui NE font PAS partie du GABARIT de RECHERCHE
                                                                  



                        On peut DCOMPOSER le GABARIT de RECHERCHE en :  (?x) ( Gabarit_1 | Gabarit_2 ) ,?  =
                                                    

                            Gabarit_1 , reprsentant le Groupe 2, :
                                               

                                TOUTE suite, mme NULLE, de car. <> de VIRGULE, PARENTHSE, \r et \n  =  ([^(,)\r\n])*
                                                                                               
                             +  1 PARENTHSE OUVRANTE                                                 =  \(
                                                                                      
                             +  1 Car. <> de PARENTHSE, \r, \n  OU  RCURSION  Groupe 2, POSSIBLE = ( [^()\r\n] | (?2) )*
                                                                  
                             +  1 PARENTHSE FERMANTE                                                 =  \)
                                                                                      
                             +  TOUTE suite, mme NULLE, de car. <> de VIRGULE, PARENTHSE, \r et \n  =  (?3)*
                                                                                               
                       OU
                       
                             Gabarit_2 :
                             

                                Toute SUITE, NON NULLE, de car. <> de VIRGULE, PARENTHSE, \r et \n   =  (?3)+
                                                                                                

                             SUIVI d'une VIRGULE VENTUELLE                                           =  ,?
                                                                                  


                        Dans ce GABARIT, on a :
                                

                            Groupe 3 = [^(,)\r\n] = (?3) = TOUT caractre DIFFRENT de VIRGULE, PARENTHSE, \r et \n
                                     
                            Groupe 2  est utilis comme RFRENCE RCURSIVE (?2), situe DANS le GROUPE 2, LUI-MME
                                                               
                            Groupe 1 = $1 = Gabarit CHERCH, SANS VIRGULE possible FINALE,  rcrire en REMPLACEMENT
                                                    


                    REMARQUE :
                    

                        Avec un LANGAGE de PROGRAMMATION, cette DCOMPOSITION est FACILE  obtenir :
                                             

                            RSULTAT en MS-DOS Qbasic, version 1.0, par exemple :
                                        

                                l$ = "a,b,(c,d)f2,op3(e,(op5(h,op6(k,l)f6)f5,g)f4)f3"
                                l$ = l$ + ",op7(op 8(t,u),s)f8,de,op9(y,z),op10(g,op11(t,e)h)"
                                CLS : p = 0
                                DO
                                  l$ = MID$(l$, p + 1)
                                  n = 0
                                  FOR p = 1 TO LEN(l$)
                                    c$ = MID$(l$, p, 1)
                                    IF c$ = "(" THEN n = n + 1
                                    IF c$ = ")" THEN n = n - 1
                                    IF c$ = "," AND n = 0 THEN
                                      PRINT MID$(l$, 1, p - 1)
                                      EXIT FOR
                                    END IF
                                  NEXT
                                LOOP WHILE p <= LEN(l$)
                                PRINT l$



        Si  (?sx) (. (?<!DEB) (?<!FIN) (?<! ) ) * DEB ( ( (?! DEB).) *? | (?R) ) FIN ( (?! DEB) (?! FIN ) (?! ) . ) *
            

            en partie RECHERCHE, et ' <$2>\r\n', SANS les GUILLEMETS SIMPLES, en partie REMPLACEMENT :
                                               

                - EXTRACTION de TOUT le TEXTE, COMPRIS entre 2 mots BALISES, NON INCLUS, PRCD de la CHANE ' ',
                                              
                      ENTOUR par les DEUX caractres '<' et '>' et enfin SUIVI de \r\n
                                                                    

                - SUPPRESSION de TOUT texte, SANS balise NON APPARIE, situ en DEHORS des 2 BALISES, de NIVEAU 0 ACTUEL
                                          

                EXEMPLE :
                

                    123 DEB Je vais DEB faire un FIN essai
                    de texte
                    pour voir FIN 456 Je pense que DEB DEB ca marche FIN bien ! FIN 99
                    DernireDEB ligne Youpi, c'estFIN OK !!!


                    est MODIFI, aprs le PREMIER remplacement GLOBAL en :
                                                        
                         < Je vais DEB faire un FIN essai
                        de texte
                        pour voir >
                         < DEB ca marche FIN bien ! >
                         < ligne Youpi, c'est>


                    est MODIFI, aprs le DEUXIME remplacement GLOBAL en :
                                                        
                           < faire un >
                         < ca marche >
                        < ligne Youpi, c'est>


            NOTES :
            

                Le texte EXTRAIT peut, VENTUELLEMENT contenir d'AUTRES blocs, avec les DEUX mots BALISES, mais,
                                                       
                    UNIQUEMENT, si ceux-ci sont APPARIS,  CHAQUE niveau d'IMBRICATION ! ( Utilisation de la
                                          
                    RCURSIVIT )
                    

                Le texte EXTRAIT peut tre RPARTI sur PLUSIEURS lignes
                                    

                Si on utilise le BOUTON " Remplacer tout "  ( Remplacement GLOBAL ), R-EXCUTER N fois le cycle de
                                                                 
                    RECHERCHE-REMPLACEMENT, N tant la PROFONDEUR d'IMBRICATION des BLOCS de texte 'DEB ....... FIN'
                                                     

                Le NOMBRE de CHANES '' - 1 donne le niveau d'IMBRICATION du TEXTE qui suit,  partir du NIVEAU 0
                                                        

                L'OPTION (?s) signifie que le MTA-caractre . = TOUT caractre, y COMPRIS  \r , \n  ou  \f
                                                          
                    Voir l'exemple PRCDENT, concernant l'OPTION (?x)
                                                  

                La RFRENCE RCURSIVE (?R) se rapporte au GABARIT ENTIER de la RECHERCHE
                                   



        ^((?:.*?(RegExp1)){N-1}.*?)\2 en partie RECHERCHE  et  \1RegExp2 en partie REMPLACEMENT, permet de REMPLACER
                                                
            TOUTES les Nmes OCCURRENCES de l'expression RGULIRE 'RegExp1', trouves dans CHAQUE ligne du FICHIER,
                                                         
            par l'expression RGULIRE 'RegExp2'
                                        

                NOTE :
                

                    Pour SUPPRIMER TOUTES les Nmes OCCURRENCES de l'expression RGULIRE 'RegExp1', mettre
                                                     
                        UNIQUEMENT  \1  en partie REMPLACEMENT
                                       

                        EXEMPLE :
                        

                            Pour SUPPRIMER le 24me POINT-VIRGULE (;) de CHAQUE ligne d'un FICHIER, mettre :
                                        

                                ^((?:.*?;){23}.*?); en partie RECHERCHE  et  \1 en partie REMPLACEMENT
                                                            



        JUSTESSE d'une expression, MME VIDE et/ou RPARTIE sur PLUSIEURS lignes, comprise ENTRE les DEUX SPARATEURS
                                                   
            '<' et '>', avec un nombre ARBITRAIRE, MME NUL, de COUPLES des DEUX signes '<' et '>' APPARIS :
                                                           


          Soit l'expression RGULIRE suivante :  <(?:(?(R)(?:[\d\r\n])++|[^<>]*+)|(?R))*> , comportant  TROIS parties :
                                                                 

            - DEUX signes, INFRIEUR '<' et SUPRIEUR '>', BORNANT l'expression RGULIRE, et comportant :
                          

            - Soit une structure CONDITIONNELLE (?(R) .... ) avec :
                                 

                  - un bloc Gabarit_si_VRAI ATOMIQUE  (?:[\d\r\n])++  s'il y a DJ eu une RCURSION
                                                  
                  - un bloc Gabarit_si_FAUX ATOMIQUE  [^<>]*+  s'il n'y a PAS ENCORE eu de RCURSION ( niveau SUPRIEUR )
                                                             

            - Soit la rfrence RCURSIVE (?R)  la TOTALIT de l'expression RGULIRE, sur les caractres trouvs,
                                             
                  eux-mmes ENTRE DEUX signes INFRIEUR '<' et SUPRIEUR '>'
                                    

        Elle signifie, globalement :


            TANT qu'il n'y a PAS RCURSION, on recherche, ENTRE les signes '<' et '>', BORNANT la RegExp, un ensemble
                               
                ATOMIQUE, MME NUL, :
                

                - de caractres, DIFFRENTS des DEUX signes INFRIEUR et SUPRIEUR '<' et '>'
           ou                    
                - de caractres, eux-mmes ENTRE DEUX signes '<' et '>', satisfaisant l'expression RGULIRE ENTIRE,
                                    
                      suite  la rfrence RCURSIVE (?R)  la TOTALIT de la RegExp sur cette SOUS-CHANE
                                                         


            DS qu'il y a RCURSION, on recherche :
            

                - un ensemble ATOMIQUE, NON NUL, de caractres CHIFFRES ( [0-9] ) , de \r  ou de  \n
           ou                                                      
                - un ensemble ATOMIQUE, MME NUL, eux-mmes ENTRE DEUX signes '<' et '>', satisfaisant l'expression
                                   
                      RGULIRE ENTIRE, suite  la rfrence RCURSIVE (?R)  la TOTALIT de la RegExp sur cette
                                                
                      SOUS-CHANE
                      


        Ainsi, cette expression RGULIRE recherche et slectionne le PLUS GRAND ensemble de caractres, ENTRE DEUX
                                                                           
            signes INFRIEUR '<' et SUPRIEUR '>' comprenant, VENTUELLEMENT, des caractres INFRIEUR et SUPRIEUR,
                                                  
             correctement APPARIS
             


        EXEMPLE :
        

            Soit la chane SUJET :  Mr<<123<456>78>904>0Guy0<<54<6>4>>THE<12345>VENOT<>, alors les DIFFRENTES
                               
                SLECTIONS sont :
                

                Si curseur AVANT le M de 'Mr'                  =>  <<123<456>78>904>  ,  <<54<6>4>>  ,  <12345>  et  <>
                                                                              
                Si curseur ENTRE les DEUX PREMIERS signes '<'  =>  <123<456>78>       ,  <<54<6>4>>  ,  <12345>  et  <>
                                                      
                Si curseur APRS le 1ER CHIFFRE 1              =>  <456>              ,  <<54<6>4>>  ,  <12345>  et  <>
                                                                         


        EXEMPLE :
        

            Soit la chane MODIFIE  Mr<<1A3<456>78>904>0Guy0<<54<6>4>>THE<12345> ( LETTRE A, au lieu du CHIFFRE 2 )
                                             

            Si curseur AVANT le M de 'Mr', la 1RE recherche slectionne <1A3<456>78> ( et NON <<1A3<456>78>904> ! )
                                                                      

                En effet, dans la chane '<1A3<456>78>' la LETTRE A, situe au niveau SUPRIEUR, HORS RCURSION, est
                                                              
                    est CORRECTE ( caractre BIEN DIFFRENT de '<' et de '>' ) => Cette chane est SLECTIONNE
                                                             

                Par CONTRE, dans la chane ENGLOBANTE  '<<1A3<456>78>904>', la LETTRE A, situe au 1ER niveau d'IMBRI-
                                                      
                    CATION ( <<.A. ), PENDANT la RCURSION, n'est PAS CORRECTE, car DIFFRENTE d'un CHIFFRE, de \r et \n
                                         

                        => Cette chane n'est donc PAS SLECTIONNE
                                                   


        EXEMPLE :
        

            Soit la chane MODIFIE  Mr<<1A3<4B6>78>904>0Guy0<<54<6>4>>THE<12345> ( LETTRES A et B, au lieu de 2 et 5 )
                                             

            Si curseur AVANT le M de 'Mr', la 1RE recherche slectionne <4B6> ( et NON les CHANES <1A3<4B6>78> et
                                                                      
                <<1A3<4B6>78>904> )
                

            Pour la MME raison, le chane <4B6>, contenant QUE LETTRE B, au niveau SUPRIEUR, HORS RCURSION, est
                                                          
                donc SLECTIONNE,
                     

                tandis que les DEUX chanes suivantes ne sont PAS SLECTIONNES :
                                                          

                    - '<1A3<4B6>78>',    car contenant la LETTRE B au 1ER  niveau d'IMBRICATION, PENDANT la RCURSION
                                                                  
                    - <<1A3<4B6>78>904>, car contenant la LETTRE A au 1ER  niveau d'IMBRICATION, PENDANT la RCURSION
                                                             
                                         et  contenant la LETTRE B au 2ME niveau d'IMBRICATION, PENDANT la RCURSION
                                                                              



        L'expression RGULIRE  \(((?>[^()]+)|(?R))*\) recherche et slectionne le PLUS GRAND ensemble de caractres,
                                                             
            MME VIDE, entre DEUX PARENTHSES, OUVRANTE et FERMANTE, contenant un nombre ARBITRAIRE, MME NUL, de
                                          
            COUPLES de PARENTHSES APPARIS
            



        L'expression RGULIRE  ([^()]*\((?R)\))*[^()]* recherche et slectionne,  PARTIR de la POSITION du CURSEUR,
                                                             
            le PREMIER PLUS GRAND ensemble de caractres, contenant un nombre ARBITRAIRE, MME NUL, de COUPLES de
                                                        
            PARENTHSES APPARIS
            



14) IMPORTANCE de la FORME du texte SUJET analys et des DONNES dsires par l'UTILISATEUR :
    


        Ne JAMAIS oublier que la FORME de l'expression RGULIRE de RECHERCHE dpend, de manire IMPORTANTE, des DONNES
                                                              
            du ( ou des ) FICHIER(S) parcourus et de la FORME des RSULTATS, attendus par l'UTILISATEUR
                                                                

                EXEMPLES :
                

                   Soit la RECHERCHE d'un NOMBRE, SPAR d'un MOT ALPHABTIQUE, AVEC ou SANS caractres ACCENTUS, par
                                                                
                       UN ou PLUSIEURS caractres BLANC, SPARATEUR de ligne ou NON  ( \t , \n , \x0B , \f , \r , \x20
                                                            
                       ou  \xA0 )
                           

                   La RegExp  \d+\s+[\l\u]+  permet une TELLE recherche GLOBALE
                                                           

                   mais  \d+\s+\l+      est PRFRABLE si le fichier NE contient PAS de lettres MAJUSCULES
                                                              
                   mais  \d+\s+\[a-z]+  est PRFRABLE si le MOT ne DOIT contenir QUE des MINUSCULES, NON ACCENTUES
                                                               
                   mais  \d+\h+\l+      est PRFRABLE si MOT et NOMBRE, sont SPARS QUE par des ESPACES ou TABULATIONS
                                                                            
                   mais  \d+ +\l+       est PRFRABLE si MOT et NOMBRE, sont SPARS, QUE par UNE ou PLUSIEURS ESPACES
                                                                      
                   mais  \d+ \l+        est PRFRABLE si MOT et NOMBRE, sont SPARS, QUE par UNE ESPACE
                                                                       


                   Soit la RECHERCHE d'un caractre QUELCONQUE, qui est REDOUBL
                                                     

                   La RegExp  (.)\1  permet une TELLE recherche GLOBALE
                                                           

                   mais  ([^ \t])\1  est PRFRABLE pour VITER les CHANES de 2 ESPACES ou de 2 TABULATIONS
                                                            
                   mais  (\w)\1      est PRFRABLE pour AFFICHER 2 CHIFFRES ou LETTRES IDENTIQUES ou 2 TIRETS BAS (_)
                                                      
                   mais  ([\u\l])\1  est PRFRABLE pour AFFICHER 2 LETTRES IDENTIQUES, ACCENTUES ou NON
                                                
                   mais  (\u)\1      est PRFRABLE pour AFFICHER 2 lettres MAJUSCULES IDENTIQUES, ACCENTUES ou NON
                                                    
                   mais  ([A-Z])\1   est PRFRABLE pour AFFICHER 2 LETTRES MAJUSCULES IDENTIQUES, NON ACCENTUES
                                               



15) NOTE concernant la RCURSIVIT :
    

        Le PRINCIPE de RCURSIVIT, ( prsence d'une RFRENCE de GROUPE,  l'INTRIEUR du GROUPE qu'elle REPRSENTE ),
                                             
            a t voqu, dans ce MANUEL,  travers QUELQUES exemples, mais mriterait des APPROFONDISSEMENTS, qui ont,
                                                                    
            ACTUELLEMENT, t ngligs, vu la COMPLEXIT  dfinir des exemples CONCRETS et des explications CLAIRES
                                                         

                Aprs INVESTIGATIONS, cette TECHNIQUE fera l'objet d'un AJOUT ultrieur  ce prsent DESCRIPTIF !
                                                                             



 III) SYNTAXE des expressions RGULIRES PCRE en partie REMPLACEMENT :
      


 1) RAPPELS IMPORTANTS :
    


        Pour excuter des REMPLACEMENTS, utiliser, UNE des DEUX mthodes en CLIQUANT :
                                                   

            - DEUX fois, ou PLUS, sur le BOUTON " Remplacer ",      de l'ONGLET " Remplacer "   ( Mthode PAS  PAS )
                                                                                
            - UNE SEULE fois      sur le BOUTON " Remplacer tout ", de l'ONGLET " Remplacer "   ( Mthode GLOBALE )
                                                                          


        Si la CASE " Boucler " de la fentre " Rechercher ", accessible par ' CTRL + F ', n'est PAS COCHE, les
                                                                       
             RECHERCHES, REMPLACEMENTS et COMPTAGES porteront sur l'INTGRALIT du fichier COURANT, en cliquant sur :
                                    

                - le BOUTON " Rechercher dans le document actuel ", de l'ONGLET " Rechercher "
                                                
                - le BOUTON " Compter ",                            de l'ONGLET " Rechercher "
                                                                           
                - le BOUTON " Trouver tout " ou " Remplacer tout ", de l'ONGLET " Rechercher dans les fichiers d'un dossier "
                                                        

                    EXCEPTIONS :
                    

                        Les REMPLACEMENTS ou les MARQUAGES se feront DEPUIS la position ACTUELLE du CURSEUR, jusqu'
                                               
                            la TOUTE FIN du fichier COURANT, en cliquant sur :
                                           

                                - le BOUTON " Remplacer tout ",  de l'ONGLET " Remplacer "
                                                                 
                                - le BOUTON " Rechercher tout ", de l'ONGLET " Marquer "
                                                                


                        Si, le TYPE de RECHERCHE choisi n'est PAS le mode " Expression rgulire ", et que la DIRECTION
                                                                                   
                            indique est " Haut ", les REMPLACEMENTS ou les MARQUAGES se feront DEPUIS la position
                                                                      
                            ACTUELLE du CURSEUR, jusqu'au TOUT DBUT du fichier COURANT, en cliquant sur :
                                                   

                                - le BOUTON " Remplacer tout ",  de l'ONGLET " Remplacer "
                                                                 
                                - le BOUTON " Rechercher tout ", de l'ONGLET " Marquer "
                                                                


        Si la zone de RECHERCHE comporte des LOOKAROUNDS POSITIFS, NE PAS utiliser la mthode PAS  PAS, lors du
                                                           
            REMPLACEMENT ( Bouton " Remplacer " )
                        

                => Cliquer EXCLUSIVEMENT sur le bouton " Remplacer tout " ( Mthode GLOBALE )
                                                         


        Si on utilise la bote de RECHERCHE-REMPLACEMENT ( CTRL + R ) du PLUGIN " TextFX ", avec la CASE " Regular Expr "
                                                                       
            COCHE, NE PAS utiliser, de manire GNRALE, la mthode PAS  PAS ( BOUTON " Repl&FAgain " ), mais :
                                                             

                - Cliquer une PREMIRE fois sur le bouton " Find " ( Recherche de la 1RE OCCURRENCE )
                                                                    
                - Cliquer, ENSUITE, sur le bouton " Replace Rest " ( Mthode GLOBALE )
                                                          



 2) CARACTRES :
    

        TOUT caractre d'une expression RGULIRE, en partie REMPLACEMENT,  est appari  LUI-MME, SAUF :
                                                         

                        - le caractre PARENTHSE OUVRANTE     ( ( )
                        - le caractre PARENTHSE FERMANTE     ( ) )
                        - le caractre ANTISLASH               ( \ )
                        - le caractre DOLLAR                  ( $ )
                        - le caractre POINT d'INTERROGATION   ( ? )
                        - le caractre DEUX-POINTS             ( : )


            Ces 6 CARACTRES, appels MTA-caractres, ont une signification SPCIALE, explique par la SUITE
                                                

            REMARQUE :
            

                Par rapport aux MTA-caractres de RECHERCHE, SEUL, le MTA-caractre DEUX-POINTS (:) est NOUVEAU
                                                           


        Un caractre UNIQUE, de REMPLACEMENT, peut tre, au CHOIX :
                                          


        A) Un caractre LITTRAL, NON MTA-caractre :
           

               TOUT caractre, DIFFRENT des MTA-caractres indiqus CI-DESSUS, se reprsente LUI-MME
                                                     

                   EXEMPLE :
                   
                       L'expression RGULIRE 'A3@;z', en partie REMPLACEMENT, remplace l'expression RGULIRE cherche
                                                                                   
                           par la chane LITTRALE  'A3@;z'
                                            

               REMARQUES :
               

                   Bien que NON ncessaire, un caractre, NON MTA-caractre, peut, galement, tre PRCD du
                                                                    
                       caractre ANTISLASH ( \ )
                                 

                           EXEMPLE :
                           

                               la FORME  \@ ( ou  @ ) quivaut au caractre LITTRAL 'AROBASE' ( @ ), qui est SUBSTITU
                                                                                                  
                                    l'expression RGULIRE cherche
                                                  


                   Les formes '\ + LETTRE', ci-dessous, NE participent PAS  la SYNTAXE des expressions RGULIRES, en
                                                                     
                       partie REMPLACEMENT, et sont IDENTIQUES au caractre LETTRE, indiqu APRS le caractre ANTISLASH
                                                                              

                           \b  ,  \c  ,  \d  ,  \g  ,  \h  ,  \i  ,  \j  ,  \k  ,  \m  ,  \o  ,  \p  ,  \q  ,  \s  ,
                                                                                       
                           \w  ,  \x  ,  \y  ,  \z  ,  \A  ,  \B  ,  \C  ,  \D  ,  \F  ,  \G  ,  \H  ,  \I  ,  \J  ,
                                                                                       
                           \K  ,  \M  ,  \N  ,  \O  ,  \P  ,  \Q  ,  \R  ,  \S  ,  \T  ,  \V  ,  \W  ,  \X  ,  \Y  et \Z
                                                                                            

                               EXEMPLE :
                               

                                   La FORME  \Q ( ou  Q ), en zone REMPLACEMENT, quivaut  la lettre MAJUSCULE Q, qui
                                                                                
                                        sera SUBSTITUE  l'expression RGULIRE recherche
                                                             

                               REMARQUE :
                               

                                   Une FORME '\+ LETTRE', qui n'a AUCUNE signification SPCIALE, en partie REMPLACEMENT
                                                                     
                                       peut tre SIGNIFICATIVE en partie RECHERCHE
                                                             

                                           La forme \Q, ci -dessus, signifie DBUT d'une squence d'CHAPPEMENT, en
                                                                           
                                               partie RECHERCHE
                                                      



        B) Un MTA-caractre LITTRAL :
           

               Il est constitu du caractre ANTISLASH ( \ ), SUIVI d'un MTA-caractre et reprsente le
                                                 
                   MTA-caractre LITTRAL, SANS sa signification SPCIALE dans la syntaxe PCRE, en partie REMPLACEMENT
                                                                    

                       EXEMPLES :
                       

                           la FORME  \$  quivaut au caractre LITTRAL 'DOLLAR'    ( $ )
                                                                            
                           la FORME  \\  quivaut au caractre LITTRAL 'ANTISLASH' ( \ )
                                                                            




        C) Un caractre en NOTATION HEXADCIMALE ou OCTALE :
           

               \x00   , \x0       = le caractre de code HEXA     =    00  ( caractre Ascii NUL )
               \x{00} , \x{0000}  = le caractre de code HEXA     =    00  ( caractre Ascii NUL )
                                                                                       
               \xN                = le caractre de code HEXA     =    0N   avec N = [0-9A-Fa-f]
               \xNN               = le caractre de code HEXA     =    NN   avec N = [0-9A-Fa-f]
               \x{NN}             = le caractre de code HEXA     =    NN   avec N = [0-9A-Fa-f]
               \x{NNNN}           = le caractre de code UNICODE  =  NNNN   avec N = [0-9A-Fa-f] , si fichier cod UTF-8

               \0   , \00         = le caractre de code OCTAL    =   000  ( caractre Ascii NUL )
               \000 , \0000       = le caractre de code OCTAL    =   000  ( caractre Ascii NUL )
                                                                                       
               \0N                = le caractre de code OCTAL    =   00N   avec N = [0-7]
               \0NN               = le caractre de code OCTAL    =   0NN   avec N = [0-7]
               \0MNN              = le caractre de code OCTAL    =   MNN   avec N = [0-7] et M = [0-3]
                                                                                              

               EXEMPLES et REMARQUES :
               

                   \011           reprsente le caractre de CONTRLE 'TAB' ( 11 OCTAL = 9 DCIMAL )
                   \0113          reprsente la lettre 'K' ( 113 OCTAL = 75 DCIMAL )
                   \011\063       reprsente le caractre de CONTRLE 'TAB', suivi du CHIFFRE '3'

                   \01456         reprsente la CHANE 'e6' ( 145 OCTAL = 101 DCIMAL = 'e' )
                   \014\065\x36   reprsente le caractre de CONTRLE 'FF' suivi de la CHANE '56'

                   \x010          reprsente le caractre de CONTRLE 'SOH', suivi du CHIFFRE '0'
                   \x1AA          reprsente le caractre de CONTRLE 'SUB', suivi de la lettre MAJUSCULE 'A'
                   \x{263A}       reprsente le caractre MO-ICNE :) ( Visage SOURIANT )
                   \x{20ac}       reprsente le caractre MONTAIRE EURO (  )


               BUG :
               

                   TOUT caractre, dans la zone de REMPLACEMENT, situ APRS un ou PLUSIEURS caractre 'NUL', de code
                                                       
                       ASCII 0, QUELLE QUE SOIT sa REPRSENTATION ( \0 , \c@ , \x{00} , .... ), n'est PAS crit, comme
                                                   
                       ATTENDU, lors du remplacement EFFECTIF de l'expression RGULIRE cherche, MAIS produit des
                                                                                 
                       caractres, SANS rapport APPARENT avec les caractres SAISIS
                                                        

                           SOLUTION :
                           

                               - REMPLACER l'expression CHERCHE par une chane de REMPLACEMENT, SANS caractre NULL
                                                                                     
                               - REMPLACER le (ou les) caractres CONCERNS par un (ou des) caractre(s) 'NUL' (\x00),
                                                                                      
                                     ventuellement PRCD(S), mais PAS SUIVI(S), d'AUTRES caractres
                                                                 



        D) Un caractre d'CHAPPEMENT :
           

               \r    =   \x0D  (CR)   =   Caractre CARRIAGE RETURN     ( Caractre SPARATEUR de LIGNE )
               \a    =   \x07  (BEL)  =   Caractre BELL                ( Caractre ALERTE )
               \t    =   \x09  (TAB)  =   Caractre TABULATION          ( Caractre BLANC HORIZONTAL )
               \e    =   \x1B  (ESC)  =   Caractre ESCAPE              ( Caractre CHAPPEMENT )
               \n    =   \x0A  (LF)   =   Caractre LINE FEED           ( Caractre SPARATEUR de LIGNE )
               \v    =   \x0B  (VT)   =   Caractre VERTICAL TABULATION ( Caractre TABULATION VERTICALE )
               \f    =   \x0C  (FF)   =   Caractre FORM FEED           ( Caractre SPARATEUR de LIGNE )


               EXEMPLE :
               

                   \r\n  , en partie REMPLACEMENT, SUPPRIME l'expression RGULIRE cherche et la REMPLACE par une
                                                                 
                       'FIN de LIGNE' Windows
                        



        E) Un caractre d'CHAPPEMENT ASCII :
           

               \c@   =   \c`   =   \x00  (  Caractre de CONTRLE  'NUL'   =   Caractre NULL              )

               \cA   =   \ca   =   \x01  (  Caractre de CONTRLE  'SOH'   =   START of HEADER             )
               \cB   =   \cb   =   \x02  (  Caractre de CONTRLE  'STX'   =   START of TEXT               )
               \cC   =   \cc   =   \x03  (  Caractre de CONTRLE  'ETX'   =   END   of TEXT               )
               \cD   =   \cd   =   \x04  (  Caractre de CONTRLE  'EOT'   =   END   of TRANSMISSION       )
               \cE   =   \ce   =   \x05  (  Caractre de CONTRLE  'ENQ'   =   ENQUIREMENT                 )
               \cF   =   \cf   =   \x06  (  Caractre de CONTRLE  'ACK'   =   ACKNOWLEDGEMENT             )
               \cG   =   \cg   =   \x07  (  Caractre de CONTRLE  'BEL'   =   BELL                        )
               \cH   =   \ch   =   \x08  (  Caractre de CONTRLE  'BS'    =   BACK SPACE                  )
               \cI   =   \ci   =   \x09  (  Caractre de CONTRLE  'TAB'   =   HORIZONTAL TABULATION       )
               \cJ   =   \cj   =   \x0A  (  Caractre de CONTRLE  'LF'    =   LINE FEED                   )
               \cK   =   \ck   =   \x0B  (  Caractre de CONTRLE  'VT'    =   VERTICAL   TABULATION       )
               \cL   =   \cl   =   \x0C  (  Caractre de CONTRLE  'FF'    =   FORM FEED                   )
               \cM   =   \cm   =   \x0D  (  Caractre de CONTRLE  'CR'    =   CARRIAGE RETURN             )
               \cN   =   \cn   =   \x0E  (  Caractre de CONTRLE  'SO'    =   SHIFT IN                    )
               \cO   =   \co   =   \x0F  (  Caractre de CONTRLE  'SI'    =   SHIFT OUT                   )
               \cP   =   \cp   =   \x10  (  Caractre de CONTRLE  'DLE'   =   DELETE                      )
               \cQ   =   \cq   =   \x11  (  Caractre de CONTRLE  'DC1'   =   DEVICE CONTROL 1            )
               \cR   =   \cr   =   \x12  (  Caractre de CONTRLE  'DC2'   =   DEVICE CONTROL 2            )
               \cS   =   \cs   =   \x13  (  Caractre de CONTRLE  'DC3'   =   DEVICE CONTROL 3            )
               \cT   =   \ct   =   \x14  (  Caractre de CONTRLE  'DC4'   =   DEVICE CONTROL 4            )
               \cU   =   \cu   =   \x15  (  Caractre de CONTRLE  'NAK'   =   NEGATIVE ACKNOWLEDGEMENT    )
               \cV   =   \cv   =   \x16  (  Caractre de CONTRLE  'SYN'   =   SYNCHRONISATION             )
               \cW   =   \cw   =   \x17  (  Caractre de CONTRLE  'ETB'   =   END TRANSMISSION BLOCK      )
               \cX   =   \cx   =   \x18  (  Caractre de CONTRLE  'CAN'   =   CANCEL                      )
               \cY   =   \cy   =   \x19  (  Caractre de CONTRLE  'EM'    =   END of MEDIUM               )
               \cZ   =   \cz   =   \x1A  (  Caractre de CONTRLE  'SUB'   =   SUBSTITUTION                )

               \c[   =   \c{   =   \x1B  (  Caractre de CONTRLE  'ESC'   =   ESCAPE                      )
               \c\   =   \c|   =   \x1C  (  Caractre de CONTRLE  'FS'    =   FILE   SEPARATOR            )
               \c]   =   \c}   =   \x1D  (  Caractre de CONTRLE  'GS'    =   GROUP  SEPARATOR            )
               \c^   =   \c~   =   \x1E  (  Caractre de CONTRLE  'RS'    =   RECORD SEPARATOR            )
               \c_             =   \x1F  (  Caractre de CONTRLE  'US'    =   UNIT   SEPARATOR            )


               EXEMPLE :
               

                   \c@,  en zone REMPLACEMENT, SUBSTITUE le caractre NULL ( \x00 )  l'expression RGULIRE recherche
                                                                       


 3) RFRENCE aux GROUPES NOMMS, PRDFINIS de la RECHERCHE :
    

        En partie REMPLACEMENT, on peut utiliser UN ou PLUSIEURS des 5 groupes NOMMS, PRDFINIS, ci-dessous, qui
                                            
            reprsentent les ZONES de TEXTE suivantes :
                             


        A) TOUTE la CHANE de RECHERCHE :  $&  ou  $0  ou  $MATCH  ou  ${^MATCH}
                                 

               EXEMPLES :
               

                   #$0#       APRS remplacement, la RegExp recherche est DLIMITE par DEUX caractres DISE '#'
                                                                                 
                   -> $MATCH  APRS remplacement, la RegExp recherche est PRCDE de la CHANE de 3 caractres '-> '
                                                                                    


        B) La zone AVANT la CHANE de RECHERCHE  :  $`  ou  $PREMATCH  ou  ${^PREMATCH}
                            

               Cette ZONE reprsente l'ENSEMBLE des caractres compris ENTRE :
                                                           

                   - le DBUT de la chane SUJET et la PREMIRE occurrence,    du GABARIT de RECHERCHE, trouve
                                                                
                   - la PRCDENTE occurrence trouve et l'occurrence COURANTE, du GABARIT de RECHERCHE, trouve
                                                                 

               EXEMPLE :
               

                   Soit une chane SUJET constitue de MOTS de longueur QUELCONQUE, CHACUN d'eux tant compos de
                                                                 
                       LETTRES ou du TIRET BAS et PRCD d'un NOMBRE de longueur QUELCONQUE, comme ci-dessous :
                                              

                                           123Ceci456est_un789Essai
                                           012de6Texte12345Z


                           Alors, si la zone de RECHERCHE contient l'expression RGULIRE  [\l\u_]+ et la zone de
                                                                                  
                               REMPLACEMENT contient l'expression RGULIRE  $`${^MATCH}, chaque NOMBRE, situ AVANT
                                                                                  
                               un MOT est REDOUBL, APRS appui sur le bouton " Remplacer tout "
                                                                

                                   =>      123123Ceci456456est_un789789Essai
                                           012012de66Texte1234512345Z


               IMPORTANT :
               

                   Les remplacements SUCCESSIFS, par APPUI sur le bouton " Remplacer ", sont INOPRANTS et, SEUL
                                                                               
                       l'appui sur le bouton " Remplacer tout " donnera le rsultat CORRECT !
                                                                      


                   De PLUS, s'il n'existe qu'UNE SEULE occurrence de l'expression RGULIRE de RECHERCHE, dans la chane
                                                                                  
                       SUJET, la CASE " Boucler " devra tre COCHE
                                                 


                   Si la zone, situe AVANT la CHANE cherche, DBUTE par N caractres 'FIN de LIGNE', le groupe,
                                                              
                       PRDFINI, $` ( ou  $PREMATCH  ou  ${^PREMATCH} )  COMMENCE par N-1 caractres 'FIN de LIGNE'
                                                       
                       UNIQUEMENT
                       


        C) La zone APRS la CHANE de RECHERCHE  :  $'  ou  $POSTMATCH  ou  ${^POSTMATCH}
                            

               Elle reprsente l'ENSEMBLE des caractres, situs APRS l'occurrence ACTUELLE du GABARIT de RECHERCHE
                                                             

               EXEMPLE :
               

                   Soit une chane SUJET, compose de lettres MAJUSCULES ou MINUSCULES, CHACUNE d'elles tant PRCDE
                                                                              
                       par une CHANE de 5 TIRETS HAUT '-----', et se TERMINANT par une 'FIN de LIGNE' :
                                                            

                                           -----a-----B-----c-----Z


                           Alors, si la zone de RECHERCHE contient l'expression RGULIRE  [\l\u]+ et la zone de
                                                                                  
                               REMPLACEMENT contient l'expression RGULIRE  $0${^POSTMATCH}, on obtient, APRS appui
                                                                               
                               sur le bouton " Remplacer tout " , le TEXTE ci-dessous :
                                               

                                           -----a-----B-----c-----Z
                                           -----B-----c-----Z
                                           -----c-----Z
                                           -----Z



                           Si, par CONTRE, la chane SUJET '-----a-----B-----c-----Z' NE se TERMINE PAS par une
                                                                           
                               'FIN de LIGNE', on obtient, APRS appui sur le bouton " Remplacer tout ", la CHANE :
                                                                      

                                           -----a-----B-----c-----Z-----B-----c-----Z-----c-----Z-----Z


               IMPORTANT :
               

                   Les remplacements SUCCESSIFS, par APPUI sur le bouton " Remplacer ", sont INOPRANTS et, SEUL
                                                                               
                       l'appui sur le bouton " Remplacer tout " donnera le rsultat CORRECT !
                                                                      


        D) Le DERNIER groupe de CAPTURE, ACTUELLEMENT APPARI : $^N  ou  $LAST_SUBMATCH_RESUL  ou  ${^LAST_SUBMATCH_RESUL}
                          

               Ce groupe, PRDFINI, reprsente le CONTENU du groupe de CAPTURE, possdant la DERNIRE parenthse
                                                                       
                   FERMANTE, de la PARTIE, de l'expression RGULIRE de RECHERCHE, ACTUELLEMENT APPARIE
                                                            

                   EXEMPLE :
                   

                       Soit une chane SUJET  '-----abcdef-----'
                                       

                       Alors, si l'expression RGULIRE de RECHERCHE est  (a)|b|(c)(d)e|(f)  et l'expression RGULIRE
                                                                 
                           de REMPLACEMENT est  <$^N> , on obtient, APRS appui sur le bouton " Remplacer tout ",
                                                                          
                           la CHANE :

                                           -----<a><><d><f>-----


                           NOTES :
                           

                               Quand le gabarit TROUV est  (a) ou (f)          , l'ENTIT  $^N  vaut la valeur ELLE-MME
                                                                                                 
                               Quand le gabarit TROUV est  b  ( PAS de GROUPE ), l'ENTIT  $^N  vaut la chane VIDE
                                                                                         
                               Quand le gabarit TROUV est  (c)(d)e             , l'ENTIT  $^N  vaut la MINUSCULE 'd'
                                                                                         


                   REMARQUE :
                   

                       En FONCTION de la PLACE et du NOMBRE de PARENTHSES dans le gabarit INITIAL  abc , et pour une
                                                               
                           chane SUJET '---abc---', sont indiqus, dans les TABLEAUX ci-dessous, le gabarit EFFECTIF
                                                                                                
                           et la VALEUR du groupe PRDFINI  $^N  qui lui correspond :
                                              


                               ============================        ==============================
                               |    GABARIT    |     $^N     |        |     GABARIT     |     $^N     |
                               ============================        ==============================
                               |               |             |        |                 |             |
                               |   abc         |    RIEN     |        |   (a)(b)(c)     |     c       |
                               |               |             |        |                 |             |
                               |               |             |        |                 |             |
                               |   (ab)c       |     ab      |        |   a(bc)         |     bc      |
                               |               |             |        |                 |             |
                               |   (a(b))c     |     ab      |        |   a((b)c)       |     bc      |
                               |               |             |        |                 |             |
                               |   ((a)b)c     |     ab      |        |   a((b)c)       |     bc      |
                               |               |             |        |                 |             |
                               |   ((a)(b))c   |     ab      |        |   a((b)(c))     |     bc      |
                               |               |             |        |                 |             |
                               |               |             |        |                 |             |
                               |   (abc)       |     abc     |        |   ((a)bc)       |     abc     |
                               |               |             |        |                 |             |
                               |   (a(b)c)     |     abc     |        |   ((a)(b)c)     |     abc     |
                               |               |             |        |                 |             |
                               |   (ab(c))     |     abc     |        |   ((a)b(c))     |     abc     |
                               |               |             |        |                 |             |
                               |   (a(b)(c))   |     abc     |        |   ((a)(b)(c))   |     abc     |
                               |               |             |        |                 |             |
                               |               |             |        |                 |             |
                               |   (a)bc       |     a       |        |   ab(c)         |     c       |
                               |               |             |        |                 |             |
                               |   a(b)c       |     b       |        |   (a)b(c)       |     c       |
                               |               |             |        |                 |             |
                               |   (a)(b)c     |     b       |        |   a(b)(c)       |     c       |
                               ============================        ==============================



        E) Le GROUPE de CAPTURE de PLUS GRAND NUMRO :  $+  ou  $LAST_PAREN_MATCH  ou  ${^LAST_PAREN_MATCH}
                           

               Ce groupe, PRDFINI, reprsente le CONTENU du groupe de CAPTURE, de PLUS GRAND numro, de l'expression
                                                             
                   RGULIRE cherche,  CONDITION que ce groupe CAPTURANT soit ACTUELLEMENT celui APPARI
                                                          


                   EXEMPLE :
                   

                       Soit une chane SUJET  '-----abcdef-----'
                                       

                       Alors, si l'expression RGULIRE de RECHERCHE est  (a)|b|(c)(d)e|(f)  et l'expression RGULIRE
                                                                 
                           de REMPLACEMENT est  <$+> , on obtient, APRS appui sur le bouton " Remplacer tout ", la
                                                                         
                           CHANE :

                                           -----<><><><f>----


                           NOTES :
                           

                               Quand le gabarit TROUV est  (a) ou (b) ou (c)(d)e  , l'ENTIT  $+  vaut la chane VIDE
                                                                                             
                               Quand le gabarit TROUV est  (f)                    , l'ENTIT  $+  vaut la MINUSCULE 'f'
                                                                                                


                   REMARQUE :
                   

                       En FONCTION de la PLACE et du NOMBRE de PARENTHSES dans le gabarit INITIAL  abc , et pour une
                                                               
                           chane SUJET '---abc---', sont indiqus, dans les TABLEAUX ci-dessous, le gabarit EFFECTIF
                                                                                                
                           et la VALEUR du groupe PRDFINI  $+  qui lui correspond :
                                              


                               ===========================        =============================
                               |    GABARIT    |     $+     |        |     GABARIT     |     $+     |
                               ===========================        =============================
                               |               |            |        |                 |            |
                               |   abc         |    RIEN    |        |   (a)(b)(c)     |     c      |
                               |               |            |        |                 |            |
                               |               |            |        |                 |            |
                               |   (ab)c       |     ab     |        |   a(bc)         |     bc     |
                               |               |            |        |                 |            |
                               |   (a(b))c     |     b      |        |   a((b)c)       |     b      |
                               |               |            |        |                 |            |
                               |   ((a)b)c     |     a      |        |   a((b)c)       |     b      |
                               |               |            |        |                 |            |
                               |   ((a)(b))c   |     b      |        |   a((b)(c))     |     c      |
                               |               |            |        |                 |            |
                               |               |            |        |                 |            |
                               |   (abc)       |     abc    |        |   ((a)bc)       |     a      |
                               |               |            |        |                 |            |
                               |   (a(b)c)     |     b      |        |   ((a)(b)c)     |     b      |
                               |               |            |        |                 |            |
                               |   (ab(c))     |     c      |        |   ((a)b(c))     |     c      |
                               |               |            |        |                 |            |
                               |   (a(b)(c))   |     c      |        |   ((a)(b)(c))   |     c      |
                               |               |            |        |                 |            |
                               |               |            |        |                 |            |
                               |   (a)bc       |     a      |        |   ab(c)         |     c      |
                               |               |            |        |                 |            |
                               |   a(b)c       |     b      |        |   (a)b(c)       |     c      |
                               |               |            |        |                 |            |
                               |   (a)(b)c     |     b      |        |   a(b)(c)       |     c      |
                               ===========================        =============================


            RAPPEL :
            

                Les NOMS des 5 groupes PRDFINIS doivent tre, IMPRATIVEMENT, crits avec leur casse EXACTE
                                                                    

                    EXEMPLE :
                    

                        Soit la chane SUJET :  123abc
                                           

                        Si  abc  en partie RECHERCHE et  $PREMATCH_$0  en partie REMPLACEMENT  =>  123123_abc
                                                               
                        Si  abc  en partie RECHERCHE et  $PREMATcH_$0  en partie REMPLACEMENT  =>  123$PREMATcH_abc
                                                               

                    NOTE :
                    

                        Si on DSIRE remplacer, par exemple, l'expression RGULIRE de RECHERCHE par la chane LITTRALE
                                                                                                
                            '${LAST_PAREN_MATCH}, on crira  $${LAST_PAREN_MATCH}  ou  \${LAST_PAREN_MATCH} dans la
                                                
                            zone de REMPLACEMENT
                                    



 4) RFRENCE aux GROUPES de CAPTURE NON NOMMS de la RECHERCHE :
    

        En partie REMPLACEMENT, le CONTENU du groupe CAPTURANT, NON NOMM, de numro ABSOLU N, de l'expression RGULIRE
                                                                  
            de RECHERCHE, s'obtient par :


                - la FORME  $N   , avec la condition         N > 0
                                                           
                - la FORME  ${N} , avec la condition         N > 0
                                                         
                - la FORME  \N   , avec la DOUBLE condition  0 < N < 9
                                                     

            NOTES :
            

                Si le NOMBRE N indiqu est SUPRIEUR au PLUS GRAND numro de GROUPE de l'expression RGULIRE cherche,
                                                              
                    les FORMES  $N  ou  ${N}  ou  \N  renvoient alors la chane VIDE
                                                                 


                Si un CHIFFRE suit IMMDIATEMENT la forme $N , on crira ce CHIFFRE sous sa forme OCTALE ou HEXADCIMALE
                                                                         

                        EXEMPLES :
                        

                            Si  $0359    , en REMPLACEMENT, la SUBSTITUTION vaut le CONTENU du GROUPE n 359, s'il EXISTE
                                                                          
                            Si  $03\0659 , en REMPLACEMENT, la SUBSTITUTION vaut le CONTENU du GROUPE n 3, SUIVI de '59'
                                                                            

                                L'expression ${03}59, est, TOUTEFOIS, PLUS comprhensible !
                                                               


            REMARQUE :
            

                La POSITION, dans la RegExp de RECHERCHE, du groupe de CAPTURE, remis en partie REMPLACEMENT, influe sur
                                                                        
                    le NUMRO ABSOLU du groupe CONCERN, ( Cas de la structure CONDITIONNELLE (?(DEFINE).....)  )
                                                                  

                        EXEMPLE :
                        

                            Soit la RECHERCHE d'une adresse INTERNET
                                                   

                                - DBUTANT  une ligne ou PRCDE d'une ESPACE
                                                        
                                - FINISSANT une ligne ou SUIVIE   d'une ESPACE
                                                         

                            et le REMPLACEMENT par BORNAGE de cette MME adresse, ESPACES incluses, avec les DEUX
                                                                      
                                 caractres '<' et '>'
                                                   

                                   => RECHERCHE    = (?(DEFINE)(http://[\w.]+))(?|( (?1) )|^((?1) )|( (?1))$|^((?1))$)
                                                                                  
                                                        (groupe)     1                2        2       2         2

                                   => REMPLACEMENT = <\2>


                            Si la structure CONDITIONNELLE (DEFINE) est place APRS le GABARIT  de RECHERCHE, on a :
                                                           

                                   => RECHERCHE    = (?|( (?2) )|^((?2) )|( (?2))$|^((?2))$)(?(DEFINE)(http://[\w.]+))
                                                                                   
                                             (groupe)      1         1       1        1                      2

                                  => REMPLACEMENT = <\1>


                                Dans le PREMIER cas :
                                        

                                    le GABARIT de RECHERCHE 'http://[\w.]+', de la partie (DEFINE),   est le GROUPE 1
                                                                                 
                                    le GROUPE  rcrire, ALTERNATIVE du bloc NON CAPTURANT (?|....), est le GROUPE 2
                                                                      

                                Dans le SECOND cas :
                                        

                                    le GABARIT de RECHERCHE 'http://[\w.]+', de la partie (DEFINE),   est le GROUPE 2
                                                                                 
                                    le GROUPE  rcrire, ALTERNATIVE du bloc NON CAPTURANT (?|....), est le GROUPE 1
                                                                      


 5) RFRENCE aux GROUPES de CAPTURE NOMMS de la RECHERCHE :
    

        En partie REMPLACEMENT, le CONTENU d'un groupe CAPTURANT NOMM, de NOM 'Nom', de l'expression RGULIRE de
                                                                 
            RECHERCHE, s'obtient par la FORME :  $+{Nom}
                                            

            NOTES :
            

                Si le NOM 'Nom' indiqu n'EXISTE PAS dans l'expression RGULIRE de RECHERCHE, la FORME  ${+Nom}
                                                                              
                    renvoie alors la chane VIDE
                                     



 6) CRITURE du caractre LITTRAL $ :
    

        Pour ANNULER le SENS du MTA-caractre DOLLAR  $  ( Dsignation d'une RFRENCE ), on utilisera l'UNE des DEUX
                                                                           
            formes  \$  ou  $$
                          

            EXEMPLES :
            

                Si  \$03     , en REMPLACEMENT, la RegExp de RECHERCHE est SUBSTITUE par la CHANE '$03'
                                                                  
                Si  $${+Guy} , en REMPLACEMENT, la RegExp de RECHERCHE est SUBSTITUE par la CHANE '${+Guy}'
                                                              



        TOUTE forme, DBUTANT par le caractre DOLLAR, DIFFRENTE des FORMES  '$$' , '\$' et de CELLES indiques aux
                                                             
             PARTIES 2), 3) et 4), ci-DESSUS, s'crit sous forme LITTRALE
                                        

                EXEMPLES :
                

                    Si  $Toto    , en REMPLACEMENT, la RegExp de RECHERCHE est SUBSTITUE par la CHANE '$Toto'
                                                                     
                    Si  ${5Guy}  , en REMPLACEMENT, la RegExp de RECHERCHE est SUBSTITUE par la CHANE '${5Guy}'
                                                                   
                    Si  ${----}  , en REMPLACEMENT, la RegExp de RECHERCHE est SUBSTITUE par la CHANE '${-----}'
                                                                   
                    Si  ab $@@   , en REMPLACEMENT, la RegExp de RECHERCHE est SUBSTITUE par la CHANE 'ab $@@'
                                                                    



 7) GROUPEMENT LEXICAL :
    

        Les DEUX parenthses, OUVRANTE et FERMANTE, permettent de DFINIR la CHANE, situe ENTRE celles-ci, comme un
                                                     
            groupe LEXICAL, qui sera GNRALEMENT utilis dans les STRUCTURES CONDITIONNELLES ( Voir paragraphe SUIVANT )
                                                                        

            NOTE :
            

                Pour SUBSTITUER une PARENTHSE LITTRALE, on utilisera les FORMES  \(  et/ou  \)
                                                        

                    EXEMPLE :
                    

                        \(\)\(\) , en REMPLACEMENT, SUBSTITUE la RegExp de RECHERCHE par la CHANE de 4 cars. '()()'
                                                              



 8) EXPRESSIONS CONDITIONNELLES :
    

        Les EXPRESSIONS CONDITIONNELLES, en partie REMPLACEMENT, permettent de SUBSTITUER :
                                        

            - une VALEUR  CHAQUE ALTERNATIVE TROUVE, de numro = N ou de NOM = 'Nom' , de la RegExp de RECHERCHE
                                                     
            - une valeur DIFFRENTE, selon que le GROUPE, de numro = N ou de NOM = 'Nom', est TROUV ou NON trouv
                                                               


        Les DEUX formes GNRALES des EXPRESSIONS CONDITIONNELLES sont :
                         

            ?ID_GroupeValeur_si_VRAI
            

            ?ID_GroupeValeur_si_VRAI:Valeur_si_FAUX
            


                avec  ID_Groupe = le NUMRO ou le NOM du GROUPE valu
                                       

                et    Valeur_si_VRAI = la VALEUR de SUBSTITUTION, si le GROUPE ID_Groupe   est     APPARI
                                                      

                et    Valeur_si_FAUX = la VALEUR de SUBSTITUTION, si le GROUPE ID_Groupe n'est PAS APPARI
                                                  


        Les 6 SYNTAXES des EXPRESSIONS CONDITIONNELLES sont les suivantes :
                 

            La FORME  ?NombreValeur_si_VRAI                 , si Nombre < 10
                                            
            La FORME  ?NombreValeur_si_VRAI:Valeur_si_FAUX  , si Nombre < 10
                             

            La FORME  ?{Nombre}Valeur_si_VRAI
                      
            La FORME  ?{Nombre}Valeur_si_VRAI:Valeur_si_FAUX
                      

            La FORME  ?{Nom}Valeur_si_VRAI
                      
            La FORME  ?{Nom}Valeur_si_VRAI:Valeur_si_FAUX
                      


        REMARQUES :
        

            Afin de PRVENIR toute AMBIGUT, il est conseill d'ENTOURER les EXPRESSIONS CONDITIONNELLES par des
                                              
                PARENTHSES
                

            Cependant, les PARENTHSES FERMANTES, qui TERMINENT la zone de REMPLACEMENT, peuvent tre OMISES
                                                            


        EXEMPLES :
        

            Soit (Alain)|(perroquet)|(vert)           , dans la zone de RECHERCHE
                                              
             et  (?1lisabeth)(?2chat)?3gris et blanc , dans la zone de REMPLACEMENT
                                    

                =>  TOUTE occurrence de la CHANE 'Alain'     est REMPLACE par la CHANE 'lisabeth'
                                                                        
                    TOUTE occurrence de la CHANE 'perroquet' est REMPLACE par la CHANE 'chat'
                                                                    
                    TOUTE occurrence de la CHANE 'vert'      est REMPLACE par la CHANE 'gris et blanc'
                                                                         


            Dans le cas GNRAL, de SUBSTITUTION d'un CARACTRE par un AUTRE caractre, on prendra :
                                           

                (Car.1)|(Car.2)|.......|(Car.n)    , en partie RECHERCHE

                (?1Car.A)(?2Car.B).......(?nCar.X) , en partie REMPLACEMENT


                    avec la CASE " Respecter la casse " COCHE
                                      

                        APRS remplacement GLOBAL  => Car. 1  devient Car. A , Car. 2 devient Car. B, etc.
                                                                 



            Soit  ^(\d+)?.*$        , dans la zone de RECHERCHE
                                            
            Soit  (?1Age:Nom) : $&  , dans la zone de REMPLACEMENT
                                      

            et la chane SUJET, en partie GAUCHE, qui devient, APRS remplacement GLOBAL, le TEXTE en partie DROITE :
                                                                    

                    Pierre                            ==>                Nom : Pierre
                    26                                ==>                Age : 26
                    Jacques                           ==>                Nom : Jacques
                    28                                ==>                Age : 28
                    Christian                         ==>                Nom : Christian
                    42                                ==>                Age : 42
                    Guy                               ==>                Nom : Guy
                    60 ( Eh oui, dj !)              ==>                Age : 60 ( Eh oui, dj )


                NOTES :
                

                    Si un NOMBRE est lu, en DBUT de LIGNE, le GROUPE 1 est APPARI
                                                
                        => La CHANE 'Age : ' est INSRE, AVANT la ligne COMPLTE ($&)
                                                          

                    Si un PRNOM est lu, en DBUT de LIGNE, le GROUPE 1 n'est PAS APPARI
                                                  
                        => La CHANE 'Nom : ' est INSRE, AVANT la ligne COMPLTE ($&)
                                                          

                    Pour l'utilisation CORRECTE des EXPRESSIONS CONDITIONNELLES, il est ncessaire de TRANSFORMER le
                                                                   
                      groupe OPTIONNEL, sur lequel porte le TEST d'appariement, en un groupe NON OPTIONNEL, SUIVI du
                                                                    
                      QUANTIFICATEUR ?
                      

                          En effet, (\d+)? est VRIFIE si EXISTE des CHIFFRES et NON VRIFIE si EXISTE des LETTRES
                                                     
                          Mais (\d*) est TOUJOURS vrifie ( car cela signifie 1 ou PLUSIEURS ou AUCUN chiffre )
                                                                  

                              => la partie Valeur_si_FAUX, dans ce CAS, ne se prsente donc JAMAIS !
                                                                           


            REMARQUES :
            

                Pour crire un signe POINT d'INTERROGATION (?) LITTRAL ou un signe DEUX-POINTS (:) LITTRAL, employer
                                                      
                    les FORMES  \?  et/ou  \:
                                         


                Les expressions CONDITIONNELLES de REMPLACEMENT peuvent tre IMBRIQUES :
                                                  

                    EXEMPLE :
                    

                        Soit un FICHIER, constitu des SIX lignes, selon le FORMAT :  NOM-PRNOM + TABULATION(S) + ge
                                                                             
                            comme ci-DESSOUS ( l'ge peut tre ABSENT ou INDFINI ) :
                                                               

                            Jean-Pierre DUPONT	3
                            Jean DURAND			???
                            Guy THEVENOT		60
                            Robert BOUCHARD		
                            Don HO				1025
                            Ren MONJOT			103


                        Alors la RegExp  ^(.+)\t+(\d?(\d)?\d$)?                                   en partie RECHERCHE
                                                                                      
                          et  la RegExp  \1\t\t ge (?2correct et (?3>=:<) cent ans:erron \: )  en partie REMPLACEMENT
                                                     
                          permettent d'obtenir le FORMATAGE suivant :
                                                  

                            Jean-Pierre DUPONT		 ge correct et < cent ans
                            Jean DURAND				 ge erron : ???
                            Guy THEVENOT			 ge correct et < cent ans
                            Robert BOUCHARD			 ge erron :
                            Don HO					 ge erron : 1025
                            Ren MONJOT				 ge correct et >= cent ans


                    EXPLICATIONS :
                    

                        ^(.+)\t+  slectionne les NOMS-PRNOMS, en DBUT de LIGNE, suivis de 1 ou PLUSIEURS TABULATIONS
                                                                    
                            Suite  un BACKTRACKING, le 1ER groupe (.+) est constitu de CHAQUE nom-prnom, suivi
                                                              
                                du NOMBRE de TABULATIONS - 1, car \t+ correspond TOUJOURS  la DERNIRE tabulation \t
                                                                 

                        (\d?(\d)?\d$)?, cherche une SUITE de CHIFFRES, OPTIONNELLE, constituant le GROUPE 2, qui est
                                                         
                            compose de 3 CHIFFRES, dont les 2 PREMIERS sont OPTIONNELS, et dont le DERNIER chiffre
                                                                      
                            TERMINE la LIGNE
                            

                            Le 3ME groupe (\d) correspond au 2ME CHIFFRE du NOMBRE  3 chiffres :
                                                  

                                - si nombre  1 CHIFFRE, les 2 PREMIERS termes \d, OPTIONNELS, valent la chane VIDE
                                                                                 
                                - si nombre  2 CHIFFRES, le 1ER \d correspond aux DIZAINES et le 2ME \d  chane VIDE
                                                                                    
                                - si nombre  3 CHIFFRES, le 1ER \d vaut les CENTAINES et le 2ME \d vaut les DIZAINES
                                                                              
                                - si nombre  PLUS de 3 CHIFFRES, la SUITE \d?(\d)?\d$ n'est JAMAIS possible => les
                                                                
                                      GROUPES 2 et 3 ne sont, alors, PAS DFINIS
                                                       


                        '\1\t\t ge ', en REMPLACEMENT, rcrit le 1ER groupe, SUIVI de 2 TABULATIONS, puis de ' ge '
                                                         

                            Si le GROUPE 2 EXISTE, on crit la CHANE 'correct et '      ( Partie THEN, AVANT signe : )
                                                                                 

                                Si le GROUPE 3 EXISTE,       on crit '>='               ( Partie THEN, AVANT signe : )
                                                                                          
                                Si le GROUPE 3 N'existe PAS, on crit '<'                ( Partie ELSE, APRS signe : )
                                                                                     
                                On TERMINE en crivant la CHANE ' cent ans'             ( Partie THEN, AVANT signe : )
                                                                                           

                            Si le GROUPE 2 N'existe PAS, on crit la CHANE 'erron : '  ( Partie ELSE, APRS signe : )
                                                                             



 9) MODIFICATEURS de CASSE :
    

        Les MODIFICATEURS de CASSE sont des squences d'CHAPPEMENT, qui MODIFIE la CASSE du ( ou des ) CARACTRES,
                                           
            placs APRS,  SUBSTITUER  l'expression RGULIRE de RECHERCHE
                                                    


        Les MODIFICATEURS de CASSE peuvent tre INSRS et AGIR :
                              

            - DANS les chanes LITTRALES
                           
            - DEVANT les RFRENCES de GROUPE PRDFINIS, EXCEPT les DEUX rfrences  $PREMATH  et  $POSTMATCH
                                             
            - DEVANT les RFRENCES de GROUPE, NOMMS ou NON NOMMS
                         
            - DEVANT les EXPRESSIONS CONDITIONNELLES
                   


        Les 5 FORMES de MODIFICATEURS de CASSE sont :
                

           - la FORME  \l  qui AFFICHE le caractre SUIVANT en MINUSCULE
                                               

           - la FORME  \u  qui AFFICHE le caractre SUIVANT en MAJUSCULE
                                               

           - la FORME  \L  qui AFFICHE TOUS les caractres SUIVANTS en MINUSCULES, EXCEPT un caractre PRCD de la
                                                                 
                 la FORME  \u  , jusqu' l'APPARITION d'UNE des DEUX formes  \U  ou  \E
                                                           

           - la FORME  \U  qui AFFICHE TOUS les caractres SUIVANTS en MAJUSCULES, EXCEPT un caractre PRCD de la
                                                                 
                 la FORME  \l  , jusqu' l'APPARITION d'UNE des DEUX formes  \L  ou  \E
                                                           


        EXEMPLES :
        

            \w+  en partie RECHERCHE et  \u$0  en partie REMPLACEMENT, SUBSTITUE TOUS les MOTS, commenant par des
                                           
                LETTRES par ces MMES mots, avec la PREMIRE lettre en MAJUSCULE
                                                   

            \UaBc\lAbcDef  en partie REMPLACEMENT, SUBSTITUE l'expression RGULIRE recherche par la CHANE 'ABCaBCDEF'
                                                                   

            \LaBc\uabcDef  en partie REMPLACEMENT, SUBSTITUE l'expression RGULIRE recherche par la CHANE 'abcAbcdef'
                                                                   

            (?1Age:Nom) : $&  en partie REMPLACEMENT, peut AUSSI s'crire \u(?1age:nom) : $&
                                              

            (a)|b|(cde)|(f)  en partie RECHERCHE et  <\u$^N>  en partie REMPLACEMENT, SUBSTITUE la chane SUJET
                                                      

                'fabcdef' par la CHANE de REMPLACEMENT '<F><A><><Cde><F>'
                                      



 IV) SUPPRESSION ou AJOUT de LIGNES VIDES :
     


        Les 4 TABLEAUX, ci-dessous, rcapitulent DIFFRENTES manires de SUPPRIMER ou d'AJOUTER des lignes VIDES, dans
                                                                
            un FICHIER, avec les expressions RGULIRES,  indiquer dans les DEUX zones de RECHERCHE et de REMPLACEMENT,
                                                                             
            pour CHAQUE cas
                 


        IMPORTANT :
        

            - AVANT toute SUPPRESSION de lignes VIDES par RECHERCHE-REMPLACEMENT, il est recommand de SUPPRIMER TOUTES
                                                     
                  les lignes VIDES, places en TOUT DBUT du fichier COURANT
                                          


            - Dans la partie RECHERCHE, les 'FIN de LIGNE' sont trouves par l'UTILISATION du caractre JOKER  \R
                                                                        

                  Cependant, le SYMBOLE \R trouve, en PLUS des caractres 'FIN de LIGNE' STANDARD ( CR+LF, LF, CR ),
                                                                    
                      5 AUTRES caractres, ASSIMILS  une 'FIN de LIGNE' : \x0B ( VT ) , \f ( FF ) , \x85 (  ) ,
                                                                  
                      \x{2028} et \x{2029}
                          

                  Si le fichier COURANT comporte UN ou PLUSIEURS de ces CARACTRES, il sera NCESSAIRE de REMPLACER,
                                                                      
                      en partie RECHERCHE, CHAQUE symbole \R par :
                                  

                          \r\n  si le TYPE du fichier est 'WINDOWS'
                                                       
                          \n    si le TYPE du fichier est 'UNIX'
                                                         
                          \r    si le TYPE du fichier est 'MAC'
                                                         


            - Dans les TABLEAUX, des caractres 'FIN de LIGNE' WINDOWS, soit la SUITE '\r\n' sont, parfois, INDIQUS
                                                                      
                  en partie REMPLACEMENT :
                            

                      Si le TYPE de fichier est 'UNIX' on crira UNIQUEMENT le caractre \n
                                                                       
                      Si le TYPE de fichier est 'MAC', on crira UNIQUEMENT le caractre \r
                                                                        


        Dans les TABLEAUX ci-dessous, les CONVENTIONS suivantes sont utilises :
                                  

            FL dsigne une 'FIN de LIGNE', soit CR + LF si fichier WINDOWS, LF si fichier UNIX ou CR si fichier MAC
                                                                            

              =>   - entre DEUX lignes JUXTAPOSES,                , il y a ZRO 'FIN de LIGNE'
                                                       
                   - entre DEUX lignes CONSCUTIVES,               , il y a UNE  'FIN de LIGNE'
                                                       
                   - entre DEUX lignes, spares par une INTERLIGNE, il y a DEUX 'FIN de LIGNE' et ainsi de suite...
                                                         


            Le nombre POSITIF ou NUL n reprsente le NOMBRE de symbole \R, en partie RECHERCHE
                                                             

            Le nombre POSITIF ou NUL m reprsente le NOMBRE de suites '\r\n' ( ou \n ou \r ), en partie REMPLACEMENT
                                                                          

            Le nombre POSITIF ou NUL p reprsente le NOMBRE de suites '\1', en partie REMPLACEMENT
                                                              

            Le nombre POSITIF x reprsente le NOMBRE de 'FIN de LIGNE', ACTUELLEMENT trouv par la recherche COURANTE
                                                       


        ATTENTION :
        

            Certaines RECHERCHES utilisent  (\R)*  ou  (\R)+  et d'AUTRES recherches utilisent  (\R*)  ou  (\R+)  !!
                                                                            



        =========================================================================================================
        |      Zone  de      |         Zone  de         |            Bouton            |            Bouton           |
        |      RECHERCHE     |       REMPLACEMENT       |        " Remplacer "         |      " Remplacer tout "     |
        =========================================================================================================
        |  \R*               |  \r\n......\r\n          |    AJOUT de m lignes VIDES   |      BUG  -  BOUCLAGE       |
        ---------------------------------------------------------------------------------------------------------
        |  (\R)*             |  \r\n......\r\n\1....\1  |    AJOUT de m lignes VIDES   |      BUG  -  BOUCLAGE       |
        =========================================================================================================



        =========================================================================================================
        |      Zone  de      |         Zone  de         |           Bouton             |            Bouton           |
        |      RECHERCHE     |       REMPLACEMENT       |          Remplacer           |      " Remplacer tout "     |
        =========================================================================================================
        |  (\R)*             |  \1.....\1               |                              |  Si x <= 1 FL => IDEM       |
        |                    |  ---------               |             BUG              |                             |
        |                    |   p fois                 |                              |  Si x >  1 FL => p+1 FL     |
        ---------------------------------------------------------------------------------------------------------
        |  \R\R....\R(\R)*   |  \r\n......\r\n\1....\1  |  Si x <  n+1 FL => IDEM      |  Si x <  n FL => IDEM       |
        |  ----------        |  ----------------------  |  Si x =  n+1 FL => m+1   FL  |  Si x =  n FL => m   FL     |
        |  n fois ( >0 )     |    m fois       p fois   |  Si x >  n+1 FL => m+p+1 FL  |  Si x >  n FL => m+p FL     |
        =========================================================================================================



        =========================================================================================================
        |      Zone  de      |         Zone  de         |           Bouton             |            Bouton           |
        |      RECHERCHE     |       REMPLACEMENT       |          Remplacer           |      " Remplacer tout "     |
        =========================================================================================================
        |  (\R*)             |  \1.....\1               |                              |                             |
        |                    |  ---------               |            BUG               |  Si x FL => p(x-1)+1 FL     |
        |                    |   p fois                 |                              |                             |
        ---------------------------------------------------------------------------------------------------------
        |  \R\R....\R(\R*)   |  \r\n......\r\n\1        |  Si x <  n+1 FL => IDEM      |  Si x <  n FL => IDEM       |
        |  ----------        |  --------------          |                              |                             |
        |  n fois ( >0 )     |      m fois              |  Si x >= n+1 FL => x+m-n FL  |  Si x >= n FL => x+m-n FL   |
        =========================================================================================================



        =========================================================================================================
        |      Zone  de      |         Zone  de         |           Bouton             |            Bouton           |
        |      RECHERCHE     |       REMPLACEMENT       |          Remplacer           |      " Remplacer tout "     |
        =========================================================================================================
        |  \R\R....\R(\R)+   |  \r\n......\r\n\1....\1  |  Si x <= n+1 FL => IDEM      |  Si x <= n FL => IDEM       |
        |  ----------        |  ----------------------  |                              |                             |
        |    n fois          |    m fois       p fois   |  Si x >  n+1 FL => m+p+1 FL  |  Si x >  n FL => m+p FL     |
        =========================================================================================================



        =========================================================================================================
        |      Zone  de      |         Zone  de         |           Bouton             |            Bouton           |
        |      RECHERCHE     |       REMPLACEMENT       |          Remplacer           |      " Remplacer tout "     |
        =========================================================================================================
        |  \R\R....\R(\R+)   |  \r\n......\r\n\1        |  Si x <= n+1 FL => IDEM      |  Si x <= n FL => IDEM       |
        |  ----------        |  --------------          |                              |                             |
        |    n fois          |      m fois              |  Si x >  n+1 FL => x+m-n FL  |  Si x >  n FL => x+m-n FL   |
        =========================================================================================================



        A PARTIR des formules GNRALES, ci-dessus, on peut en dduire QUELQUES cas PARTICULIERS intressants :
                                                      


 1) CAS du remplacement GLOBAL ( Bouton " Remplacer tout " ) :
    


        =========================================================================================================
        |      Zone  de      |         Zone de          |  NBRE de FL CRITES, selon   |   EFFET du REMPLACEMENT     |
        |                    |                          |                    |                        |
        |      RECHERCHE     |       REMPLACEMENT       |   le NBRE de FL TROUVES     |  Bouton " Remplacer tout "  |
        |           |              |                   |               |
        =========================================================================================================
        |                    |                          |  Si x <= 1 FL  =>  IDEM      |   SUPPRESSION de TOUTES     |
        |  \R*               |  RIEN                    |                              |   les lignes VIDES, soit    |
        |                    |                          |  Si x >  1 FL  =>  1 FL      |    TOUS LES INTERLIGNES     |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <= 1 FL  =>  IDEM      |   SUPPRESSION de TOUTES     |
        |  (\R)*             |  \1                      |                              |  les lignes EXCDENTAIRES   |
        |                    |                          |  Si x >  1 FL  =>  2 FL      |  2me, 3me... ligne VIDE   |
        ---------------------------------------------------------------------------------------------------------
        |                    |  \1....\1                |  Si x <  1 FL  =>  IDEM      |  JUXTAPOSITION des BLOCS    |
        |  \R(\R)*           |  --------                |  Si x =  1 FL  =>  0 FL      |  de lignes NON VIDES, s-   |
        |                    |   p fois                 |  Si x >  1 FL  =>  p FL      |  pars de p 'FIN de LIGNE'  |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <  1 FL  =>  IDEM      |    DIMINUTION de TOUTE      |
        |  \R(\R*)           |  \1                      |                              |  SUITE de 'FIN de LIGNE'    |
        |                    |                          |  Si x >= 1 FL  =>  x-1 FL    |    de 1 'FIN de LIGNE'      |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <  2 FL  =>  IDEM      |  DIMINUTION de TOUTE SUITE  |
  (*)   |  \R\R(\R*)         |  \r\n\1                  |                              |    de 'FIN de LIGNE' > 1    |
        |                    |                          |  Si x >= 2 FL  =>  x-1 FL    |     de 1 'FIN de LIGNE'     |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <= 0 FL  =>  IDEM      |  1 SEULE ligne RSULTANTE   |
        |  \R+               |  RIEN                    |                              |   ESPACES et TABULATIONS    |
        |                    |                          |  Si x >  0 FL  =>  0 FL      |  (\t) sont TOUS CONSERVS   |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <= 0 FL  =>  IDEM      |  SUPPRESSION de TOUTES      |
  (*)   |  \R+               |  \r\n                    |                              |  les lignes VIDES, soit     |
        |                    |                          |  Si x >  0 FL  =>  1 FL      |   TOUS LES INTERLIGNES      |
        ---------------------------------------------------------------------------------------------------------
        | \R....\R(\R+)      |                          |  Si x <= n FL  =>  IDEM      |  DIMINUTION de TOUTE SUITE  |
        | --------           |  \1                      |                              |    de 'FIN de LIGNE' > n    |
        |  n fois            |                          |  Si x >  n FL  =>  x-n FL    |     de n 'FIN de LIGNE'     |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <= 1 FL  =>  IDEM      |  DIMINUTION de TOUTE SUITE  |
        | \R(\R+)            |  \1                      |                              |    de 'FIN de LIGNE' > 1    |
        |                    |                          |  Si x >  1 FL  =>  x-1 FL    |     de 1 'FIN de LIGNE'     |
        ---------------------------------------------------------------------------------------------------------


            IMPORTANT  :
            

                TOUTES ces RECHERCHES-REMPLACEMENTS, ci-dessus, fonctionnent QUEL que SOIT le TYPE du fichier COURANT
                                                           
                    ( WINDOWS, UNIX ou MAC ), EXCEPT les DEUX formes, repres par une ASTRISQUE, oprationnelles,
                                                               
                    par DFAUT, pour des fichiers de type WINDOWS, SEULEMENT
                                                      


 2) CAS du remplacement PAS  PAS ( Bouton " Remplacer " ) :
    


        =========================================================================================================
        |      Zone  de      |         Zone de          |  NBRE de FL CRITES, selon   |    EFFET du REMPLACEMENT    |
        |                    |                          |                    |                        |
        |      RECHERCHE     |       REMPLACEMENT       |   le NBRE de FL TROUVES     |     Bouton " Remplacer "    |
        |           |              |                   |                    |
        =========================================================================================================
        |                    |                          |                              |                             |
        |  \R*               |  RIEN                    |           BUG                |            BUG              |
        |                    |                          |                              |                             |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |                              |                             |
        |  (\R)*             |  \1                      |           BUG                |            BUG              |
        |                    |                          |                              |                             |
        ---------------------------------------------------------------------------------------------------------
        |                    |  \1....\1                |  Si x <  2 FL    =>  IDEM    |  INTERLIGNE seul SUPPRIM   |
        |  \R(\R)*           |  --------                |  Si x =  2 FL    =>  1   FL  |   TOUTE SUITE de FL > 2     |
        |                    |   p fois                 |  Si x >  2 FL    =>  p+1 FL  |   est AJUSTE   p+1 FL     |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <  2 FL    =>  IDEM    |  DIMINUTION de TOUTE SUITE  |
        |  \R(\R*)           |  \1                      |                              |    de 'FIN de LIGNE' > 1    |
        |                    |                          |  Si x >= 2 FL    =>  x-1 FL  |     de 1 'FIN de LIGNE'     |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <  3 FL    =>  IDEM    |  DIMINUTION de TOUTE SUITE  |
  (*)   |  \R\R(\R*)         |  \r\n\1                  |                              |    de 'FIN  de LIGNE' > 2   |
        |                    |                          |  Si x >= 3 FL    =>  x-1 FL  |     de 1 FIN de LIGNE       |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <= 1 FL    =>  IDEM    |   SUPPRESSION de TOUTES     |
        |  \R+               |  RIEN                    |                              |   les lignes VIDES, soit    |
        |                    |                          |  Si x >  1 FL    =>  1 FL    |    TOUS LES INTERLIGNES     |
        ---------------------------------------------------------------------------------------------------------
        |                    |                          |  Si x <= 1 FL    =>  IDEM    |   SUPPRESSION de TOUTES     |
  (*)   |  \R+               |  \r\n                    |                              |  les lignes EXCDENTAIRES   |
        |                    |                          |  Si x >  1 FL    =>  2 FL    |  2me, 3me... ligne VIDE   |
        ---------------------------------------------------------------------------------------------------------
        | \R....\R(\R+)      |                          |  Si x <= n+1 FL  =>  IDEM    |  DIMINUTION de TOUTE SUITE  |
        | --------           |  \1                      |                              |   de 'FIN de LIGNE' > n+1   |
        |  n fois            |                          |  Si x >  n+1 FL  =>  x-n FL  |     de n 'FIN de LIGNE'     |
        ---------------------------------------------------------------------------------------------------------


            IMPORTANT  :
            

                Le REMPLACEMENT PAS  PAS n'est PAS conseill ( BUGS ), EXCEPT pour un nombre RDUIT de REMPLACEMENTS
                                                               


                TOUTES ces RECHERCHES-REMPLACEMENTS, ci-dessus, fonctionnent QUEL que SOIT le TYPE du fichier COURANT
                                                           
                    ( WINDOWS, UNIX ou MAC ), EXCEPT les DEUX formes, repres par une ASTRISQUE, oprationnelles,
                                                               
                    par DFAUT, pour des fichiers de type WINDOWS, SEULEMENT
                                                      



 V) RECHERCHES et/ou REMPLACEMENTS STANDARD :
    


        IMPORTANT :
        

            - Le REMPLACEMENT par l'appui sur le BOUTON " Remplacer tout " ( Mthode GLOBALE ) est TOUJOURS correct
                                                                  


            - Le REMPLACEMENT par l'appui sur le BOUTON " Remplacer " ( Mthode PAS  PAS ) fonctionne GNRALEMENT
                                                                         
                  Quand ce n'est PAS le cas ( par BUG ou rsultat ERR0N ), une NOUVELLE colonne, 'Bouton Remplacer'
                                                                               
                  est CRE, avec l'indication 'NON'
                                           


            - Quand la RECHERCHE SEULE, SANS remplacement est POSSIBLE, la SYNTAXE de la ZONE de RECHERCHE est indique
                                                       
                  dans un SECOND tableau,  DROITE du PREMIER tableau
                                      


            - AVANT une action de RECHERCHE-REMPLACEMENT, il est recommand de SUPPRIMER TOUTES les lignes VIDES,
                                                                
                  VENTUELLES, places en TOUT DBUT du fichier COURANT, afin d'VITER quelques BUGS MINEURS de N++ !
                                                                         


            - AVANT une action de RECHERCHE-REMPLACEMENT, il est recommand de SUPPRIMER TOUS les caractres 'FF' (\x0C)
                                                                        
                  du fichier COURANT, car :
                             

                      - Vis  vis du caractre JOKER '.', celui-ci est vu,  TORT, comme un CARACTRE de 'FIN de LIGNE'
                                                                                              
                      - Il peut, parfois, BLOQUER le REMPLACEMENT, au COUP par COUP, avec le BOUTON " Remplacer "
                                                                                  


            Les DEUX conditions PRCDENTES seront supposes RALISES, dans les EXEMPLES ci-aprs !
                                                         


            Les RECHERCHES-REMPLACEMENTS, ci-dessous, dans les lignes NON VIDES d'un fichier, fonctionnement, SAUF
                                                                             
                EXCEPTION indique, quand la DERNIRE ligne NON VIDE du fichier NE se termine PAS par une 'FIN de LIGNE'
                                                          



 1) AJOUT d'une CHANE Ch en DBUT de CHAQUE ligne, VIDE ou NON VIDE, d'un FICHIER :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
   (1)  |             ^              |             Ch             |
        --------------------------------------------------------
   (2)  |             .*             |            Ch$0            |
        ========================================================


            NOTE :
            

                La CHANE Ch peut, aussi, tre un SIMPLE caractre UNIQUE
                                         

                Cet AJOUT est EFFECTIF sur TOUTES les LIGNES du fichier, VIDES ou NON VIDES
                                                   



 2) AJOUT d'une CHANE Ch en DBUT de CHAQUE ligne, NON VIDE, d'un FICHIER :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
   (1)  |            ^(.)            |            Ch\1            |
        --------------------------------------------------------
   (2)  |             .+             |            Ch$0            |
        ========================================================


            NOTE :
            

                La CHANE Ch peut, aussi, tre un SIMPLE caractre UNIQUE
                                         



 3) AJOUT d'une CHANE Ch en FIN de CHAQUE ligne, VIDE ou NON VIDE, d'un FICHIER :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
   (1)  |            \r              |            Ch\r            |
        --------------------------------------------------------
   (2)  |             $              |             Ch             |
        --------------------------------------------------------
   (3)  |            .*              |            $0Ch            |
        ========================================================


            NOTES :
            

                La CHANE Ch peut, aussi, tre un SIMPLE caractre UNIQUE
                                         

                Cet AJOUT est EFFECTIF sur TOUTES les LIGNES du fichier, VIDES ou NON VIDES
                                                   

                Dans le CAS 1, le FICHIER doit tre PUR WINDOWS ( FIN de LIGNE  = \r\n  et  AUCUN \r ou \n ORPHELIN )
                                                                        

                Dans les CAS 2 et 3, le FICHIER ne doit contenir AUCUN caractre 'FF' ( \x0c ), sinon CRASH de N++
                                                                  

                Dans le CAS 1, la CHANE Ch n'est PAS AJOUTE  la DERNIRE ligne NON VIDE, SANS 'FIN de LIGNE'
                                            



 4) AJOUT d'une CHANE Ch en FIN de CHAQUE ligne, NON VIDE, d'un FICHIER :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
   (1)  |           (.)$             |            \1Ch            |     Oui     |
        ---------------------------------------------------------------------
   (2)  |            .+              |            $0Ch            |     Oui     |
        ---------------------------------------------------------------------
   (3)  |           .\K$             |             Ch             |     NON     |
        =====================================================================


            NOTES :
            

                La CHANE Ch peut, aussi, tre un SIMPLE caractre UNIQUE
                                         

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) dans le CAS 3
                                                                  



 5) AJOUT d'une CHANE Ch dans TOUTES les lignes VIDES d'un FICHIER :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
        |            ^$              |             Ch             |
        ========================================================


            NOTES :
            

                La CHANE Ch peut, aussi, tre un SIMPLE caractre UNIQUE
                                         

                La CHANE Ch n'est JAMAIS insre dans la PREMIRE ligne VIDE, VENTUELLE, d'un FICHIER
                                             



 6) SUPPRESSION de 1  n CARACTRES en DBUT de CHAQUE ligne d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
        |        ^.{1,n}(.*)         |             \1             |      |        ^.{1,n}        |
        ========================================================      =======================


            NOTES :
            

                TOUS les CARACTRES, des LIGNES de n caractres au PLUS, sont donc SUPPRIMS
                                                     

                La FORME ^.{1,n} en partie RECHERCHE, et RIEN en partie REMPLACEMENT, ne fonctionne PAS ( BUG Notepad++ )
                                                                       



 7) SUPPRESSION du PREMIER caractre de CHAQUE ligne d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
        |           ^.(.*)           |             \1             |      |          ^.           |
        ========================================================      =======================


            NOTE :
            

                La FORME ^. en partie RECHERCHE, et RIEN en partie REMPLACEMENT, ne fonctionne PAS ( BUG Notepad++ ! )
                                                                       



 8) SUPPRESSION de 1  n CARACTRES en FIN de CHAQUE ligne d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
        |          .{1,n}$           |            RIEN            |      |        .{1,n}$        |
        ========================================================      =======================


            NOTES :
            

                TOUS les CARACTRES, des LIGNES de n caractres au PLUS, sont donc SUPPRIMS
                                                     



 9) SUPPRESSION du DERNIER caractre de CHAQUE ligne d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
        |             .$             |            RIEN            |      |          .$           |
        ========================================================      =======================



10) SUPPRESSION de TOUTES les lignes VIDES d'un FICHIER, de type WINDOWS ( LIGNES finissant par CR + LF ) :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
        |          (\r\n)+           |            \r\n            |     NON     |
        ---------------------------------------------------------------------
        |          (\r\n)+           |             \1             |     NON     |
        ---------------------------------------------------------------------
   (3)  |            \R+             |            \r\n            |     NON     |      =======================
        ---------------------------------------------------------------------      |    Recherche SEULE    |
   (4)  |            \R*             |            RIEN            |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (5)  |            ^\R+            |            RIEN            |     NON     |      |         ^\R+          |
        ---------------------------------------------------------------------      -----------------------
   (6)  |          \R\K\R+           |            RIEN            |     NON     |      |        \R\K\R+        |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                     

                Les PREMIRE et DEUXIME lignes VIDES , VENTUELLES, du FICHIER ne sont JAMAIS SUPPRIMES
                                                    

                Dans les CAS 3  6, les lignes VIDES, gales  CR , LF ou FF, UNIQUEMENT, sont aussi SUPPRIMES
                                                                           



11) SUPPRESSION de TOUTES les lignes VIDES d'un FICHIER, de type UNIX ( LIGNES finissant par LF ) :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
        |            \n+             |             \n             |     NON     |
        ---------------------------------------------------------------------
        |           (\n)+            |             \1             |     NON     |
        ---------------------------------------------------------------------
   (3)  |            \R+             |             \n             |     NON     |      =======================
        ---------------------------------------------------------------------      |    Recherche SEULE    |
   (4)  |            \R*             |            RIEN            |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (5)  |            ^\R+            |            RIEN            |     NON     |      |         ^\R+          |
        ---------------------------------------------------------------------      -----------------------
   (6)  |          \R\K\R+           |            RIEN            |     NON     |      |        \R\K\R+        |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                     

                Les PREMIRE et DEUXIME lignes VIDES , VENTUELLES, du FICHIER ne sont JAMAIS SUPPRIMES
                                                    

                Dans les CAS 3  6, les lignes VIDES, gales  CR , FF ou CR + LF, sont aussi SUPPRIMES
                                                                         



12) SUPPRESSION de TOUTES les lignes VIDES d'un FICHIER, de type MAC ( LIGNES finissant par CR ) :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
        |            \r+             |             \r             |     NON     |
        ---------------------------------------------------------------------
        |           (\r)+            |             \1             |     NON     |
        ---------------------------------------------------------------------
   (3)  |            \R+             |             \r             |     NON     |      =======================
        ---------------------------------------------------------------------      |    Recherche SEULE    |
   (4)  |            \R*             |            RIEN            |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (5)  |            ^\R+            |            RIEN            |     NON     |      |         ^\R+          |
        ---------------------------------------------------------------------      -----------------------
   (6)  |          \R\K\R+           |            RIEN            |     NON     |      |        \R\K\R+        |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                     

                Les PREMIRE et DEUXIME lignes VIDES , VENTUELLES, du FICHIER ne sont JAMAIS SUPPRIMES
                                                    

                Dans les CAS 3  6, les lignes VIDES, gales  LF , FF ou CR + LF, sont aussi SUPPRIMES
                                                                         



13) SUPPRESSION de TOUTES les lignes VIDES EXCDENTAIRES d'un FICHIER, de type WINDOWS ( LIGNES finissant par CR + LF ) :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
        |        \r\n(\r\n)+         |          \r\n\r\n          |     NON     |
        ---------------------------------------------------------------------
        |        \r\n(\r\n)+         |            \1\1            |     NON     |
        ---------------------------------------------------------------------
   (3)  |           \R\R+            |          \r\n\r\n          |     NON     |      =======================
        ---------------------------------------------------------------------      |    Recherche SEULE    |
   (4)  |           (\R)*            |             \1             |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (5)  |         \R\R\K\R+          |            RIEN            |     NON     |      |       \R\R\K\R+       |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                     

                Les PREMIRE, DEUXIME et TROISIME lignes VIDES , VENTUELLES, du FICHIER ne sont JAMAIS SUPPRIMES
                                                    

                Dans les CAS 3  5, les lignes VIDES, EXCDENTAIRES, gales  CR , LF, ou FF, SEULEMENT, sont SUPPRIMES
                                                                                 



14) SUPPRESSION de TOUTES les lignes VIDES EXCDENTAIRES d'un FICHIER, de type UNIX ( LIGNES finissant par LF ) :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
        |            \n\n+           |            \n\n            |     NON     |
        ---------------------------------------------------------------------
        |           \n(\n)+          |            \1\1            |     NON     |
        ---------------------------------------------------------------------
   (3)  |           \R\R+            |            \n\n            |     NON     |      =======================
        ---------------------------------------------------------------------      |    Recherche SEULE    |
   (4)  |           (\R)*            |             \1             |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (5)  |         \R\R\K\R+          |            RIEN            |     NON     |      |       \R\R\K\R+       |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                     

                Les PREMIRE, DEUXIME et TROISIME lignes VIDES , VENTUELLES, du FICHIER ne sont JAMAIS SUPPRIMES
                                                    

                Dans les CAS 3  5, les lignes VIDES, EXCDENTAIRES, gales  CR , FF ou CR + LF, sont aussi SUPPRIMES
                                                                           



15) SUPPRESSION de TOUTES les lignes VIDES EXCDENTAIRES d'un FICHIER, de type MAC ( LIGNES finissant par CR ) :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
        |           \r\r+            |            \r\r            |     NON     |
        ---------------------------------------------------------------------
        |          \r(\r)+           |            \1\1            |     NON     |
        ---------------------------------------------------------------------
   (3)  |           \R\R+            |            \r\r            |     NON     |      =======================
        ---------------------------------------------------------------------      |    Recherche SEULE    |
   (4)  |           (\R)*            |             \1             |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (5)  |         \R\R\K\R+          |            RIEN            |     NON     |      |       \R\R\K\R+       |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                     

                Les PREMIRE, DEUXIME et TROISIME lignes VIDES , VENTUELLES, du FICHIER ne sont JAMAIS SUPPRIMES
                                                    

                Dans les CAS 3  5, les lignes VIDES, EXCDENTAIRES, gales  LF , FF ou CR + LF, sont aussi SUPPRIMES
                                                                           



16) SUPPRESSION de TOUS caractres 'FIN de LIGNE ' d'un FICHIER, de type WINDOWS ( LIGNES finissant par CR + LF ) :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |      =======================
        =====================================================================      |    Recherche SEULE    |
   (1)  |          (\r\n)+           |            RIEN            |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (2)  |            \R+             |            RIEN            |     NON     |      |          \R+          |
        =====================================================================      =======================


            NOTES :
            

                La SUPPRESSION est EFFECTIVE sur TOUTES les LIGNES, VIDES ou NON VIDES
                                        

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                     

                APRS remplacement, le FICHIER possde une SEULE ligne, VENTUELLEMENT prcde d'une 'FIN de LIGNE'
                                                         

                La PREMIRE 'FIN de LIGNE', VENTUELLE, du FICHIER n'est JAMAIS SUPPRIME
                                            

                Utiliser le PREMIER cas QUE si le FICHIER comporte AUCUN caractre CR ou LF qui soient ORPHELINS
                                                                                    

                Dans le 2ME cas, les 'FINS de LIGNE', gales  CR , LF ou FF, UNIQUEMENT, sont aussi SUPPRIMES
                                                                     



17) SUPPRESSION de TOUS caractres 'FIN de LIGNE ' d'un FICHIER, de type UNIX ( LIGNES finissant par LF ) :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |      =======================
        =====================================================================      |    Recherche SEULE    |
   (1)  |            \n+             |            RIEN            |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (2)  |            \R+             |            RIEN            |     NON     |      |          \R+          |
        =====================================================================      =======================


            NOTES :
            

                La SUPPRESSION est EFFECTIVE sur TOUTES les LIGNES, VIDES ou NON VIDES
                                        

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                     

                APRS remplacement, le FICHIER possde une SEULE ligne, VENTUELLEMENT prcde d'une 'FIN de LIGNE'
                                                         

                La PREMIRE 'FIN de LIGNE', VENTUELLE, du FICHIER n'est JAMAIS SUPPRIME
                                            

                Utiliser le 1ER cas, QUE si le FICHIER ne comporte PAS de caractre CR ORPHELIN ou de caractres CR + LF
                                                                                 

                Dans le 2ME cas, les 'FINS de LIGNE', gales  CR , FF ou CR + LF, sont aussi SUPPRIMES
                                                                   



18) SUPPRESSION de TOUS caractres 'FIN de LIGNE ' d'un FICHIER, de type MAC ( LIGNES finissant par CR ) :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |      =======================
        =====================================================================      |    Recherche SEULE    |
   (1)  |            \r+             |            RIEN            |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (2)  |            \R+             |            RIEN            |     NON     |      |          \R+          |
        =====================================================================      =======================


            NOTES :
            

                La SUPPRESSION est EFFECTIVE sur TOUTES les LIGNES, VIDES ou NON VIDES
                                        

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                     

                APRS remplacement, le FICHIER possde une SEULE ligne, VENTUELLEMENT prcde d'une 'FIN de LIGNE'
                                                         

                La PREMIRE 'FIN de LIGNE', VENTUELLE, du FICHIER n'est JAMAIS SUPPRIME
                                            

                Utiliser le 1ER cas, QUE si le FICHIER ne comporte PAS de caractre LF ORPHELIN ou de caractres CR + LF
                                                                                 

                Dans le 2ME cas, les 'FINS de LIGNE', gales  LF , FF ou CR + LF, sont aussi SUPPRIMES
                                                                   



19) SUPPRESSION de TOUTES les lignes COMMENANT par l'expression RGULIRE Re :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
        |          ^Re.*\R?          |            RIEN            |
        ========================================================


            NOTES :
            

                Les lignes CONCERNES sont SUPPRIMES, QUEL que SOIT leur TYPE de 'FIN de LIGNE' et le TYPE du FICHIER
                                                      

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    



20) SUPPRESSION de TOUTES les lignes FINISSANT par l'expression RGULIRE Re :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
        |          .*Re\R?           |            RIEN            |
        ========================================================


            NOTES :
            

                Les lignes CONCERNES sont SUPPRIMES, QUEL que SOIT leur TYPE de 'FIN de LIGNE' et le TYPE du FICHIER
                                                 

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    



21) SUPPRESSION de TOUTES les lignes COMPORTANT l'expression RGULIRE Re :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
        |         .*Re.*\R?          |            RIEN            |
        ========================================================


            NOTES :
            

                Les lignes CONCERNES sont SUPPRIMES, QUEL que SOIT leur TYPE de 'FIN de LIGNE' et le TYPE du FICHIER
                                                 

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    



22) SUPPRESSION de TOUTES les lignes, NON VIDES, NE comportant PAS l'expression RGULIRE Re :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
        |       ^(?!.*Re).+\R?       |            RIEN            |
        ========================================================


            NOTE :
            

                Les lignes CONCERNES sont SUPPRIMES, QUEL que SOIT leur TYPE de 'FIN de LIGNE' et le TYPE du FICHIER
                                                 

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    



23) SUPPRESSION de TOUTES les lignes NE comportant PAS l'expression RGULIRE Re :
    


        A) SUPPRESSION des SEULES lignes VIDES :
           

               =====================================================================
               |          Zone de           |          Zone  de          |   Bouton    |
               |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
               =====================================================================
               |            \R+             |            \r\n            |     NON     |
               ---------------------------------------------------------------------
               |            \R*             |            RIEN            |     NON     |
               =====================================================================


                   NOTES :
                   

                       NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) pour cette SUPPRESSION
                                                                            

                       Les PREMIRE et DEUXIME lignes VIDES , VENTUELLES, du FICHIER ne sont JAMAIS SUPPRIMES
                                                           

                       Les lignes VIDES, gales  CR , LF ou FF, UNIQUEMENT, sont aussi SUPPRIMES
                                                                   


        B) SUPPRESSION des lignes NON VIDES, NE comportant PAS l'expression RGULIRE Re :
           

               ========================================================
               |          Zone de           |          Zone  de          |
               |         RECHERCHE          |        REMPLACEMENT        |
               ========================================================
               |       ^(?!.*Re).+\R?       |            RIEN            |
               ========================================================


                   NOTE :
                   

                       Les lignes CONCERNES sont SUPPRIMES, QUEL que SOIT leur TYPE de 'FIN de LIGNE' et de FICHIER
                                                             

                       L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                           



24) SUPPRESSION de TOUTES les lignes d'EXACTEMENT n CARACTRES, NON 'FIN de LIGNE' :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
        |      ^(?=.{n}$).+\R?       |            RIEN            |
        ========================================================


            NOTES :
            

                Les lignes CONCERNES sont SUPPRIMES, QUEL que SOIT leur TYPE de 'FIN de LIGNE' et de FICHIER
                                                      



25) SUPPRESSION de TOUTES les lignes d'au MOINS n CARACTRES, NON 'FIN de LIGNE' :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
        |       ^(?=.{n}).+\R?       |            RIEN            |
        ========================================================


            NOTES :
            

                Les lignes CONCERNES sont SUPPRIMES, QUEL que SOIT leur TYPE de 'FIN de LIGNE' et de FICHIER
                                                      



26) SUPPRESSION de TOUTES les lignes d'au PLUS n CARACTRES, NON 'FIN de LIGNE' :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
        |     ^(?=.{1,n}$).+\R?      |            RIEN            |
        ========================================================


            NOTES :
            

                Les lignes CONCERNES sont SUPPRIMES, QUEL que SOIT leur TYPE de 'FIN de LIGNE' et de FICHIER
                                                      



27) SUPPRESSION de TOUT texte,  PARTIR de la PREMIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
   (1)  |            Re.*            |            RIEN            |      |         Re.*          |
        --------------------------------------------------------      =======================
   (2)  |         .*?\KRe.*          |            RIEN            |
        ========================================================


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Si l'expression RGULIRE Re NE doit PAS tre SUPPRIME :
                                 

                    - CAS 1  :  Mettre   (Re).*    en partie RECHERCHE  et  \1  en partie REMPLACEMENT
                                                                    
                    - CAS 2  :  Mettre  .*?Re\K.*  en partie RECHERCHE, et NE PAS utiliser le BOUTON " Remplacer "
                                                                          



28) SUPPRESSION de TOUT texte,  PARTIR de la DERNIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |      =====================
        ========================================================      |   Recherche SEULE   |
   (1)  |          (.*)Re.*          |             \1             |      |  SANS Remplacement  |
        --------------------------------------------------------      =====================
   (2)  |       (Re)(?!.*\1).*       |            RIEN            |      |   (Re)(?!.*\1).*    |
        --------------------------------------------------------      ---------------------
   (3)  |        Re(?!.*Re).*        |            RIEN            |      |    Re(?!.*Re).*     |
        --------------------------------------------------------      =====================
   (4)  |          .*\KRe.*          |            RIEN            |
        ========================================================


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Si l'expression RGULIRE Re NE doit PAS tre SUPPRIME :
                                       

                    - CAS 1  :  Mettre  (.*Re).*  en partie RECHERCHE
                                               
                    - CAS 2  :  Mettre  \1        en partie REMPLACEMENT
                                                     
                    - CAS 3  :  Mettre  (Re)(?!.*Re).* en partie RECHERCHE et  \1  en partie REMPLACEMENT
                                                               
                    - CAS 4  :  Mettre  .*Re\K.*  en partie RECHERCHE, et NE PAS utiliser le BOUTON " Remplacer "
                                                                          



29) SUPPRESSION de TOUT texte, JUSQU' la PREMIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
        |         .*?Re(.*)          |             \1             |      |        ^.*?Re         |
        ========================================================      =======================


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Si l'expression RGULIRE Re NE doit PAS tre SUPPRIME, mettre  .*?(Re.*)  en partie RECHERCHE
                                                             



30) SUPPRESSION de TOUT texte, JUSQU' la DERNIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
        |            .*Re            |            RIEN            |      |         .*Re          |
        ========================================================      =======================


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Si l'expression RGULIRE Re NE doit PAS tre SUPPRIME, mettre  .*(Re)  en partie RECHERCHE et
                                                             
                    \1  en partie REMPLACEMENT
                                



31) SUPPRESSION de TOUT texte, de la PREMIRE  la DERNIRE occurrence de Re, dans CHAQUE ligne d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
   (1)  |          (Re).*\1          |            RIEN            |      |       (Re).*\1        |
        --------------------------------------------------------      -----------------------
   (2)  |           Re.*Re           |            RIEN            |      |        Re.*Re         |
        ========================================================      =======================


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Si l'expression RGULIRE Re est SIMPLE et LITTRALE, employer, de PRFRENCE, le CAS 2
                                                                   

                Si l'expression RGULIRE Re NE doit PAS tre SUPPRIME, mettre  \1\1  en partie REMPLACEMENT
                                                             



32) SUPPRESSION de TOUT texte, ENTRE DEUX occurrences SUCCESSIVES de Re dans CHAQUE ligne d'un FICHIER :
    


        ========================================================      ============================
        |          Zone de           |          Zone  de          |      |      Recherche SEULE       |
        |         RECHERCHE          |        REMPLACEMENT        |      |     SANS Remplacement      |
        ========================================================      ============================
   (1)  |     (?<=(Re)).*?(?=\1)     |            RIEN            |      |     (?<=(Re)).*?(?=\1)     |
        --------------------------------------------------------      ----------------------------
   (2)  |      (?<=Re).*?(?=Re)      |            RIEN            |      |      (?<=Re).*?(?=Re)      |
        ========================================================      ============================


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Si l'expression RGULIRE Re est SIMPLE et LITTRALE, employer, de PRFRENCE, le CAS 2
                                                                   



33) SUPPRESSION de la Nme OCCURRENCE de Re dans CHAQUE ligne d'un FICHIER :
    


        ==========================================================
        |           Zone de            |          Zone  de          |
        |          RECHERCHE           |        REMPLACEMENT        |
        ==========================================================
   (1)  |  ^((?:.*?(Re)){N-1}.*?)(?2)  |             \1             |
        ----------------------------------------------------------
   (2)  |  ^((?:.*?(Re)){N-1}.*?)\2    |             \1             |
        ----------------------------------------------------------
   (3)  |   ^((?:.*?Re){N-1}.*?)Re     |             \1             |
        ==========================================================


        ==========================================================      ==============================
        |           Zone de            |          Zone  de          |      |       Recherche SEULE        |
        |          RECHERCHE           |        REMPLACEMENT        |      |      SANS Remplacement       |
        ==========================================================      ==============================
   (4)  |  ^(?:.*?(Re)){N-1}.*?\K(?1)  |            RIEN            |      |  ^(?:.*?(Re)){N-1}.*?\K(?1)  |
        ----------------------------------------------------------      ------------------------------
   (5)  |  ^(?:.*?(Re)){N-1}.*?\K\1    |            RIEN            |      |   ^(?:.*?(Re)){N-1}.*?\K\1   |
        ----------------------------------------------------------      ------------------------------
   (6)  |    ^(?:.*?Re){N-1}.*?\KRe    |            RIEN            |      |    ^(?:.*?Re){N-1}.*?\KRe    |
        ==========================================================      ==============================


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Si l'expression RGULIRE Re est LITTRALE, employer, de PRFRENCE, le CAS 2 ou 5
                                                         

                Si l'expression RGULIRE Re est SIMPLE et LITTRALE, employer, de PRFRENCE, le CAS 3 ou 6
                                                         

                Pour REMPLACER la Nme OCCURRENCE de l'expression RGULIRE 'Re', de CHAQUE ligne, par
                                            
                    la CHANE Ch, mettre :
                       

                       -  \1Ch , en partie REMPLACEMENT, pour les CAS 1, 2 ou 3
                                                  
                       -   Ch  , en partie REMPLACEMENT, pour les CAS 4, 5 ou 6
                                                    



34) SUPPRESSION de la Nme OCCURRENCE de Re d'un FICHIER :
    


        =============================================================
        |             Zone de             |          Zone  de          |
        |            RECHERCHE            |        REMPLACEMENT        |
        =============================================================
   (1)  |  (?s)((?:.*?(Re)){N-1}.*?)(?2)  |             \1             |
        -------------------------------------------------------------
   (2)  |   (?s)((?:.*?(Re)){N-1}.*?)\2   |             \1             |
        -------------------------------------------------------------
   (3)  |    (?s)((?:.*?Re){N-1}.*?)Re    |             \1             |
        =============================================================


        =============================================================      =================================
        |             Zone de             |          Zone  de          |      |         Recherche SEULE         |
        |            RECHERCHE            |        REMPLACEMENT        |      |        SANS Remplacement        |
        =============================================================      =================================
   (4)  |  (?s)(?:.*?(Re)){N-1}.*?\K(?1)  |            RIEN            |      |  (?s)(?:.*?(Re)){N-1}.*?\K(?1)  |
        -------------------------------------------------------------      ---------------------------------
   (5)  |   (?s)(?:.*?(Re)){N-1}.*?\K\1   |            RIEN            |      |   (?s)(?:.*?(Re)){N-1}.*?\K\1   |
        -------------------------------------------------------------      ---------------------------------
   (6)  |    (?s)(?:.*?Re){N-1}.*?\KRe    |            RIEN            |      |    (?s)(?:.*?Re){N-1}.*?\KRe    |
        =============================================================      =================================


            IMPORTANT :
            

                Normalement, l'ANCRE \A, dsignant le TOUT DBUT du fichier, DEVRAIT tre employe,  la PLACE de  ^,
                                                                                
                    pour cette RECHERCHE-REMPLACEMENT
                               

                    D au BUG de NOTEPAD++, concernant ASSERTION \A , AUCUNE assertion de POSITION n'a t indique
                                                        
                        Pour un comportant CORRECT, il suffit de REPLACER le CURSEUR au TOUT DBUT du fichier COURANT,
                                                              
                        avec le RACCOURCI  CTRL + Origine, AVANT l'excution de l'expression RGULIRE
                                                                          

                    En fait, cette RegExp cherche TOUJOURS la Nme OCCURRENCE de Re,  PARTIR de la POSITION du CURSEUR
                                                           


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Si l'expression RGULIRE Re est LITTRALE, employer, de PRFRENCE, le CAS 2 ou 5
                                                         

                Si l'expression RGULIRE Re est SIMPLE et LITTRALE, employer, de PRFRENCE, le CAS 3 ou 6
                                                         

                Pour REMPLACER la Nme OCCURRENCE de l'expression RGULIRE 'Re', d'un FICHIER , par
                                              
                    la CHANE Ch, mettre :
                       

                       -  \1Ch , en partie REMPLACEMENT, pour les CAS 1, 2 ou 3
                                                  
                       -   Ch  , en partie REMPLACEMENT, pour les CAS 4, 5 ou 6
                                                    



35) SUPPRESSION de TOUTE expression RGULIRE Re, entre les COLONNES n et m, dans TOUTES les lignes d'un FICHIER :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |      =======================
        =====================================================================      |    Recherche SEULE    |
   (1)  |      ^(.{n-1,m-1})Re       |             \1             |     Oui     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (2)  |      ^.{n-1,m-1}\KRe       |            RIEN            |     NON     |      |    ^.{n-1,m-1}\KRe    |
        =====================================================================      =======================


            IMPORTANT :
            

                Le TEXTE, RELATIF  l'expression RGULIRE Re, NE doit apparatre qu'UNE FOIS, entre les COLONNES n et m
                                                                       
                    Dans le cas CONTRAIRE, c'est l'OCCURRENCE la PLUS PROCHE de la COLONNE m qui sera prise en COMPTE
                                                                    


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) dans le CAS 2
                                                                  

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Pour REMPLACER le TEXTE, RELATIF  l'expression RGULIRE Re, trouve ENTRE les COLONNES n et m,
                                                      
                    UNIQUEMENT, indiquer le NOUVEAU texte dans la zone de REMPLACEMENT
                                                         



36) SUPPRESSION de TOUTE expression RGULIRE Re, en COLONNE n, dans TOUTES les lignes d'un FICHIER :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |      =======================
        =====================================================================      |    Recherche SEULE    |
   (1)  |        ^(.{n-1})Re         |             \1             |     Oui     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (2)  |        ^.{n-1}\KRe         |            RIEN            |     NON     |      |      ^.{n-1}\KRe      |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) dans le CAS 2
                                                                  

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Pour REMPLACER le TEXTE, RELATIF  l'expression RGULIRE Re, trouve en COLONNE n, UNIQUEMENT,
                                                    
                    indiquer le NOUVEAU texte dans la zone de REMPLACEMENT
                                                       



37) SUPPRESSION de TOUTE RegExp Re, SPARE de la FIN de LIGNE par n  m CARACTRES, dans TOUTES les lignes d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
        |        Re(.{n,m})$         |             \1             |      |     Re(?=.{n,m}$)     |
        ========================================================      =======================


            IMPORTANT :
            

                Le TEXTE, RELATIF  l'expression RGULIRE Re, NE doit apparatre qu'UNE FOIS, SPARE, de la FIN de
                                                                     
                    LIGNE, par n  m CARACTRES. Dans le cas CONTRAIRE, c'est l'occurrence la PLUS LOIGNE de la FIN
                                                                            
                    de LIGNE qui sera prise en COMPTE
                                          


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Pour REMPLACER le TEXTE, RELATIF  l'expression RGULIRE Re, SPARE de la FIN de LIGNE, de n  m
                                                     
                    CARACTRES UNIQUEMENT, indiquer le NOUVEAU texte dans la zone de REMPLACEMENT
                                                                    



38) SUPPRESSION de TOUTE RegExp Re, SPARE de la FIN de LIGNE par n CARACTRES, dans TOUTES les lignes d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
        |         Re(.{n})$          |             \1             |      |      Re(?=.{n}$)      |
        ========================================================      =======================


            NOTES :
            

                L'expression RGULIRE Re peut, aussi, tre une SIMPLE chane LITTRALE
                                                    

                Pour REMPLACER le TEXTE, RELATIF  l'expression RGULIRE Re, SPARE de la FIN de LIGNE, par
                                                
                    n CARACTRES UNIQUEMENT, indiquer le NOUVEAU texte dans la zone de REMPLACEMENT
                                                                    




39) SUPPRESSION de TOUT caractre, en COLONNE n, dans TOUTES les lignes d'un FICHIER :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
   (1)  |         ^(.{n-1}).         |             \1             |     Oui     |      =======================
        ---------------------------------------------------------------------      |    Recherche SEULE    |
   (2)  |       (?<=^.{n-1}).        |            RIEN            |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (3)  |         ^.{n-1}\K.         |            RIEN            |     NON     |      |      ^.{n-1}\K.       |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) dans les CAS 2 et 3
                                                                       

                Pour REMPLACER le caractre, en COLONNE n, UNIQUEMENT, indiquer le NOUVEAU caractre ou TEXTE dans
                                                                     
                    la zone de REMPLACEMENT
                               

                Le CAS 2, correspond  un LookBEHIND POSITIF de longueur n -1 FIXE, qui implique une zone OBLIGATOIRE
                                                                          
                    de n-1 caractres, en DBUT de ligne, AVANT la COLONNE n  SUPPRIMER
                                                         

                LE CAS 3,  la MME signification, mais utilise la CONSTRUCTION \K, qui permet d'OUBLIER la PARTIE
                                                           
                    du GABARIT de RECHERCHE, situe AVANT \K
                                             



40) SUPPRESSION de TOUT texte, ENTRE les COLONNES n et m, dans TOUTES les lignes d'un FICHIER :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
   (1)  |    ^(.{n-1}).{1,m-n+1}     |             \1             |     Oui     |      =======================
        ---------------------------------------------------------------------      |    Recherche SEULE    |
   (2)  |   (?<=^.{n-1}).{1,m-n+1}   |            RIEN            |     NON     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (3)  |    ^.{n-1}\K.{1,m-n+1}     |            RIEN            |     NON     |      |  ^.{n-1}\K.{1,m-n+1}  |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) dans les CAS 2 et 3
                                                                       

                Pour REMPLACER le TEXTE, compris ENTRE les COLONNES n et m, UNIQUEMENT, indiquer le NOUVEAU texte dans
                                                    
                    la zone de REMPLACEMENT
                               

                SEULES, les lignes de n CARACTRES ou PLUS sont donc MODIFIES
                                           

                Le CAS 2, correspond  un LookBEHIND POSITIF de longueur n -1 FIXE, qui implique une zone OBLIGATOIRE
                                                                          
                    de n-1 caractres, en DBUT de ligne, AVANT le bloc de COLONNES  SUPPRIMER
                                                              

                Le CAS 3,  la MME signification, mais utilise la CONSTRUCTION \K, qui permet d'OUBLIER la PARTIE
                                                           
                    du GABARIT de RECHERCHE, situe AVANT \K
                                             



41) SUPPRESSION de TOUT texte,  COMPTER de la COLONNE n, dans TOUTES les lignes d'un FICHIER :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |      =======================
        =====================================================================      |    Recherche SEULE    |
   (1)  |        ^(.{n-1}).+         |             \1             |     Oui     |      |   SANS Remplacement   |
        ---------------------------------------------------------------------      =======================
   (2)  |        ^.{n-1}\K.+         |            RIEN            |     NON     |      |      ^.{n-1}\K.+      |
        =====================================================================      =======================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) dans le CAS 2
                                                                  

                Pour REMPLACER le TEXTE,  COMPTER de la COLONNE n, de CHAQUE ligne, indiquer le NOUVEAU TEXTE dans
                                                           
                    la zone de REMPLACEMENT, APRS \1
                                 

                SEULES, les lignes de n CARACTRES ou PLUS sont donc MODIFIES
                                           



42) SUPPRESSION de TOUT texte, JUSQU' la COLONNE n, dans TOUTES les lignes d'un FICHIER :
    


        ========================================================      =======================
        |          Zone de           |          Zone  de          |      |    Recherche SEULE    |
        |         RECHERCHE          |        REMPLACEMENT        |      |   SANS Remplacement   |
        ========================================================      =======================
        |        ^.{1,n}(.*)         |             \1             |      |        ^.{1,n}        |
        ========================================================      =======================


            NOTES :
            

                Si la LIGNE fait MOINS de n CARACTRES, elle est REMPLACE par une ligne VIDE
                                                     

                Pour REMPLACER le TEXTE, JUSQU' la COLONNE n, de CHAQUE ligne, indiquer le NOUVEAU TEXTE dans
                                                         
                    la zone de REMPLACEMENT, AVANT \1
                                 



43) SUPPRESSION de TOUT texte, en DEHORS de la ZONE de COLONNES n  m, dans TOUTES les lignes d'un FICHIER :
    


        ==================================================================
        |               Zone de                |          Zone  de          |
        |              RECHERCHE               |        REMPLACEMENT        |      ==========================
        ==================================================================      |     Recherche SEULE      |
  (1)   |   ^.{n-1}+(.{1,m-n+1}).*|.{1,n-1}$   |           (?1\1)           |      |    SANS Remplacement     |
        ------------------------------------------------------------------      ==========================
  (2)   |  ^.{n-1}+(.{1,m-n+1}).*|.{1,n-1}$\R  |           (?1\1)           |      |  ^.{1,n-1}|.{m-n+1}\K.+  |
        ==================================================================      ==========================


            NOTES :
            

                Dans le CAS 1, si la LIGNE fait MOINS de n CARACTRES, elle est REMPLACE par une ligne VIDE
                                                               

                Dans le CAS 2, si la LIGNE fait MOINS de n CARACTRES, elle est SUPPRIME
                                                      

                Pour MODIFIER  le TEXTE, ENTRE les COLONNES n et m, de CHAQUE ligne, indiquer le(s) NOUVEAU(X)
                                                                  
                    TEXTE(S) dans la zone de REMPLACEMENT, AVANT et/ou APRS la RFRENCE ARRIRE \1
                                                                            


            EXPLICATIONS du CAS n 2 :
            

                -  ^.{n-1}+      =>  Recherche OBLIGATOIRE de n-1 CARACTRES en DBUT de LIGNE
                                               

                -  (.{1,m-n+1})  =>  Recherche de la CHANE, NON VIDE, de TOUT CARACTRE, ENTRE les COLONNES n et m
                                                                      
                                         Celle-ci est mise ENTRE PARENTHSES  =>  Elle est REPRSENTE par le Groupe 1
                                                                                  

                -  .*            =>  Recherche de TOUS les caractres RESTANTS, VENTUELS, de la LIGNE
                                                                

                -  |             =>  Symbole de l'ALTERNATION
                                                 

                -  .{1,n-1}$\R   =>  Recherche de n-1 caractres MAXIMUM, SUIVIS d'une 'FIN de LIGNE'
                                                             

                -  (?1\1)        =>  Si le GROUPE 1 EXISTE ( CHANE ENTRE m et n ),  on le RCRIT
                                                          
                                     Si le GROUPE 1 N'existe PAS ( LIGNE de MOINS de n CARACTRES ), on REMPLACE par
                                                                                   
                                         la chane VIDE  ( PAS de partie ELSE, avec le SIGNE : )
                                                                 



44) AJOUT d'une CHANE Ch, TOUS les n CARACTRES, dans TOUTES les lignes d'un FICHIER :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
   (1)  |           (.{n})           |            \1Ch            |     Oui     |
        ---------------------------------------------------------------------
   (2)  |            .{n}            |            $0Ch            |     Oui     |
        ---------------------------------------------------------------------
   (3)  |           .{n}\K           |             Ch             |     NON     |
        =====================================================================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) dans le CAS 3
                                                                  

                La CHANE Ch peut, aussi, tre un caractre UNIQUE de SPARATION, du genre '|'
                                                   



45) AJOUT d'une 'FIN de LIGNE', TOUS les n CARACTRES, dans TOUTES les lignes d'un FICHIER :
    


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
   (1)  |           (.{n})           |           \1\r\n           |     Oui     |
        ---------------------------------------------------------------------
   (2)  |            .{n}            |           $0\r\n           |     Oui     |
        ---------------------------------------------------------------------
   (3)  |           .{n}\K           |            \r\n            |     NON     |
        =====================================================================


        =====================================================================
        |          Zone de           |          Zone  de          |   Bouton    |
        |         RECHERCHE          |        REMPLACEMENT        | 'Remplacer' |
        =====================================================================
   (4)  |        (.{n})(?!\R)        |           \1\r\n           |     Oui     |
        ---------------------------------------------------------------------
   (5)  |         .{n}(?!\R)         |           $0\r\n           |     Oui     |
        ---------------------------------------------------------------------
   (6)  |        .{n}(?!\R)\K        |            \r\n            |     NON     |
        =====================================================================


            NOTES :
            

                NE JAMAIS utiliser le bouton " Remplacer "  ( Mthode au COUP par COUP ) dans les CAS 3 et 6
                                                                       

                Les CAS 4  6, sont IDENTIQUES aux CAS 1  3, mais VITENT l'AJOUT de 'FIN de LIGNE', NON dsires :
                                                       
                    il n'y a AJOUT de 'FIN de LIGNE', QUE lorsque la ligne COURANTE contient PLUS de n CARACTRES !
                                                                 

                Pour un FICHIER de TYPE 'UNIX', on remplacera les DEUX caractres \r\n par le SEUL caractre \n
                                                                                             

                Pour un FICHIER de TYPE 'MAC',  on remplacera les DEUX caractres \r\n par le SEUL caractre \r
                                                                                             



46) EXTRACTION du SEUL texte, SATISFAISANT la RegExp Re, de TOUTES les lignes d'un FICHIER :
    


        ========================================================
        |          Zone de           |          Zone  de          |
        |         RECHERCHE          |        REMPLACEMENT        |
        ========================================================
   (1)  |      (?s).*?(Re)|.*\z      |         (?1\1\r\n)         |
        --------------------------------------------------------
   (2)  |   (?s).*?(Re)(\R)?|.*\z    |     (?1\1(?2\2:\r\n))      |
        ========================================================


            NOTES :
            

                CHAQUE texte, SATISFAISANT la RegExp Re est RCRIT sur une NOUVELLE ligne
                                      

                Le CAS 2 est PRFRABLE, car il VITE l'AJOUT d'une 'FIN de LIGNE' si la RegExp Re TERMINE la ligne
                                                          

                Pour un FICHIER de TYPE 'UNIX', on remplacera les DEUX caractres \r\n par le SEUL caractre \n
                                                                                             

                Pour un FICHIER de TYPE 'MAC',  on remplacera les DEUX caractres \r\n par le SEUL caractre \r
                                                                                             

                Pour EXTRAIRE TOUT texte, ENTRE 2 DLIMITEURS IDENTIQUES, comme "....."  ou  '......' ,, il sera
                                           
                    PRFRABLE de vrifier, au PRALABLE, s'il n'existe pas de DLIMITEUR ORPHELIN, par la RECHERCHE
                                                                     
                    n 47, qui suit
                    

                Pour EXTRAIRE TOUT texte, ENTRE 2 DLIMITEURS DIFFRENTS, comme [.....]  ou  <.......> , il sera
                                           
                    PRFRABLE de vrifier, au PRALABLE, s'il n'existe pas de DLIMITEUR ORPHELIN, par la RECHERCHE
                                                                     
                    n 48, ci-APRS
                    


                On peut EXTRAIRE un SOUS-ensemble, SEULEMENT, de CHAQUE texte, SATISFAISANT l'expression RGULIRE Re
                                                                  

                    EXEMPLE :
                    

                        Pour EXTRAIRE la VALEUR de TOUS les CHAMPS 'name' de 'NativeLang.xml', SANS les GUILLEMETS :
                                                            


                            - GNRER l'expression RGULIRE Re et GROUPER la ZONE que l'on dsire EXTRAIRE :
                                                                     

                                   name .+?"(.+?)" , avec 2 ESPACES, placs DEVANT et APRS 'name' ( SEULE la partie
                                                                 
                                      ENTRE les DEUX GUILLEMETS, est  EXTRAIRE, dans cet EXEMPLE )
                                                              

                            - GNRER la zone de RECHERCHE associe  la RegExp Re :  (?s).*? name .+?"(.+?)"(\R)?|.*\z
                                                                    

                            - RCRIRE la zone de REMPLACEMENT, qui NE change PAS :  (?1\1(?2\2:\r\n))
                                                    

                            - DCOCHER, si ncessaire, la CASE " Respecter la casse " et COCHER la CASE " Boucler "
                                                                          

                            - Se REMETTRE en DBUT de FICHIER et CLIQUER sur le BOUTON " Remplacer tout "  ( ~ 2 sec. )
                                                                              


            EXPLICATIONS sur le CAS GNRAL n 2 :
            


                -  (?s)         =>  Recherche MULTI-LIGNES ( Le JOKER (.) trouve AUSSI les 'FINS de LIGNE'
                                                                 

                -  .*?(Re)      =>  Recherche de la 1RE RegExp Re, avec TOUT ce qui la PRCDE
                                                            
                                        Re est mise ENTRE PARENTHSES  =>  Elle est REPRSENTE par le Groupe 1
                                                                         

                -  (\R)?        =>  Recherche d'1 CARACTRE de type 'FIN de LIGNE', VENTUEL, APRS la RegExp Re
                                                            
                                        \R est mis ENTRE PARENTHSES  =>  Il est REPRSENT par le Groupe 2
                                                                      

                -  |           =>   Symbole de l'ALTERNATION
                                                

                -  .*\z        =>  Si PAS de RegExp Re (  FIN fichier ), on prend, alors, TOUS les caractres RESTANTS
                                                                                   


                -  (?1\1...)    =>  Si le GROUPE 1 EXISTE ( la RegExp Re ), on le RCRIT et on EXCUTE la partie ....
                                                                   

                                    Si le GROUPE 1 N'existe PAS ( FIN de fichier ) on REMPLACE par la chane VIDE
                                                                             
                                        ( PAS de partie ELSE, avec le SIGNE : )
                                                    

                -  (?2\2:\r\n)  =>  Si le Groupe 2 EXISTE ( Une 'FIN de LIGNE' APRS la RegExp Re ) on le RCRIT (\2)
                                                      

                                    Si le Groupe 2 N'existe PAS ( PAS de 'FIN de LIGNE' APRS la RegExp Re ), on GNRE
                                                               
                                        un PASSAGE automatique  la ligne SUIVANTE par la RCRITURE de '\r\n'
                                                              



47) RECHERCHE du PREMIER DLIMITEUR #, APRS n COUPLES #.....# ( avec n >=0 ), dans CHAQUE ligne du fichier COURANT :
    


        =================================
        |         Recherche SEULE         |
        |        SANS Remplacement        |
        =================================
   (1)  |   ^(([^#\r\n]*?#)(?2))*+.*\K#   |
        ---------------------------------
   (2)  |  ^(?:([^#\r\n]*?#)(?1))*+.*\K#  |
        =================================


            NOTES :
            

                Cette RECHERCHE permet d'IDENTIFIER :
                      

                    - des ZONES de TEXTE, BORNES par un SEUL caractre DLIMITEUR, telles que "......"  ou   '......' ,
                                                           
                          qui sont MAL apparies ( Dlimiteur MANQUANT ou EXCDENTAIRE )
                                                     

                    - des LIGNES avec une SEULE occurrence de ce DLIMITEUR
                                           


                Dans le TABLEAU ci-dessus, le DLIMITEUR '#' peut tre REMPLAC par n'IMPORTE QUEL AUTRE caractre
                                                          
                    Cependant, s'il est, GALEMENT, un MTA-caractre de RECHERCHE, placer un CARACTRE '\' DEVANT
                                                                         

                Le DLIMITEUR,  chercher, est indiqu TROIS fois dans CETTE expression RGULIRE
                                                               

                Employer, de PRFRENCE, le CAS 2, avec groupe NON CAPTURANT, qui permet une recherche PLUS RAPIDE,
                                                                           
                    en particulier, sur un FICHIER de GRANDE taille
                                                      



48) RECHERCHE du PREMIER DLIMITEUR # ou @, APRS n COUPLES #.....@ ( avec n >=0 ), dans CHAQUE ligne du fichier COURANT :
    


        ======================================
        |           Recherche SEULE            |
        |          SANS Remplacement           |
        ======================================
   (1)  |   ^(([^#@\r\n]*?)#(?2)@)*+.*\K[#@]   |
        --------------------------------------
   (2)  |  ^(?:([^#@\r\n]*?)#(?1)@)*+.*\K[#@]  |
        ======================================


            NOTES :
            

                Cette RECHERCHE permet d'IDENTIFIER :
                                

                    - des ZONES de TEXTE, BORNES par DEUX caractres DLIMITEURS, telles que [......]  ou   <......> ,
                                                                 
                          qui sont MAL apparies ( Dlimiteur MANQUANT ou EXCDENTAIRE  ou dlimiteurs INVERSS )
                                                                      

                    - des LIGNES avec une SEULE occurrence d'UN des DEUX DLIMITEURS
                                       


                Dans le TABLEAU ci-dessus, les DLIMITEURS '#' et/ou '@' peuvent tre REMPLACS par d'AUTRES caractres
                                                              
                     Cependant, s'ils sont, GALEMENT, des MTA-caractres de RECHERCHE, placer un CARACTRE '\' DEVANT
                                                                           

                Les DEUX DLIMITEURS, # et @, sont indiqus, CHACUN, TROIS fois dans CETTE expression RGULIRE
                                                           

                Employer, de PRFRENCE, le CAS 2, avec groupe NON CAPTURANT, qui permet une recherche PLUS RAPIDE,
                                                                           
                    en particulier, sur un FICHIER de GRANDE taille
                                                      


            TRS IMPORTANT :
            

                Cette RECHERCHE est INOPRANTE, en cas de BLOCS #.....@ IMBRIQUS, tels que   #....#-----@.........@,
                                                    

                Elle fonctionne, UNIQUEMENT, avec une SUITE QUELCONQUE de BLOCS  #.....@, INCLUS dans CHAQUE ligne
                                                        

                    => Dans le cas de BLOCS IMBRIQUS, il serait NCESSAIRE de faire APPEL aux expressions RGULIRES
                                                                             
                           RCURSIVES
                           



49) INTERVERSION de DEUX zones de TEXTE CONTIGUS dans TOUTES les lignes d'un FICHIER :
    

        PRAMBULE :
        

            CHAQUE ligne du fichier COURANT est DCOUPE en QUATRE zones 1, 2 ,3 et 4 :
                                               

                - la PREMIRE  zone COMMENCE  la COLONNE 1 de la ligne COURANTE
                                               
                - la DEUXIME  zone COMMENCE  la COLONNE x de la ligne COURANTE
                                               
                - la TROISIME zone COMMENCE  la COLONNE y de la ligne COURANTE
                                               
                - la QUATRIME zone COMMENCE  la COLONNE z de la ligne COURANTE
                                               

            La zone 1 DBUTE la ligne COURANTE et la zone 4  TERMINE la ligne COURANTE
                                          

            APRS remplacement, les ZONES 2 et 3 sont CHANGES et CHAQUE ligne est COMPOSE des zones 1, 3, 2 et 4
                                                        


        ============================================================
        |            Zone de             |          Zone  de          |
        |           RECHERCHE            |        REMPLACEMENT        |
        ============================================================
   (1)  |    ^(.{x-1})(.{y-x)(.{z-y})    |           \1\3\2           |
        ------------------------------------------------------------
   (2)  |   ^(.{x-1})(.{y-x)(.{1,z-y})   |           \1\3\2           |
        ============================================================


            NOTES :
            

                La QUATRIME zone, en FIN de LIGNE, peut tre ABSENTE et, dans ce cas, la VALEUR z correspond 
                                                              
                    la DERNIRE colonne de la ZONE 3, AUGMENTE de 1
                                

                        => la LARGEUR de CHAQUE ligne DOIT tre SUPRIEURE ou GALE  la VALEUR z-1 dans le CAS 1
                                                                     


                    Si, de PLUS, la largeur, NON NULLE, de la TROISIME zone est VARIABLE, on emploiera plutt le CAS 2
                                                                                    

                        Dans ce CAS, la LARGEUR de CHAQUE ligne DOIT, alors, tre SUPRIEURE ou GALE  la VALEUR y
                                                                              



50) DPLACEMENT et/ou SUPPRESSION de ZONES de TEXTE, DTERMINES en COLONNES ( Cas GNRAL ) :
           

        HYPOTHSES :
        

            CHAQUE ligne du fichier COURANT est DCOUPE en ZONES  1, 2 ,3 ......., n
                                          

                - la PREMIRE       zone     COMMENCE  la COLONNE a de la ligne COURANTE  ( =>  a = 1 )
                                                                
                - la DEUXIME       zone     COMMENCE  la COLONNE b de la ligne COURANTE
                                                        
                - la TROISIME      zone     COMMENCE  la COLONNE c de la ligne COURANTE
                                                        
                  .......................    ............................................

                - l'AVANT-DERNIRE  zone     COMMENCE  la COLONNE x de la ligne COURANTE
                                                   
                - la DERNIRE       zone n   COMMENCE  la COLONNE y de la ligne COURANTE
                                                       

                - la zone SUIVANTE, FICTIVE, COMMENCE  la COLONNE z de la ligne COURANTE
                                                         


            TOUTES les ZONES de texte, EXCEPTE la DERNIRE, possdent une LARGEUR FIXE
                                       


            La DERNIRE zone n peut avoir, au CHOIX, une longueur FIXE ou VARIABLE :
                                                  

                Si la ZONE n a une largeur FIXE, la LONGUEUR de CHAQUE ligne est GALE  la VALEUR z-1
                                                                  

                Si la DERNIRE zone n a une largeur VARIABLE, NON NULLE, la LONGUEUR des LIGNES DOIT tre >= VALEUR y
                                                                  


        ====================================================================================
        |                        Zone de                         |          Zone  de          |
        |                       RECHERCHE                        |        REMPLACEMENT        |
        ====================================================================================
        |  ^(.{b-1})(.{c-b})(.{d-c}).........(.{y-x})(.{1,z-y})  |      Voir ci-DESSOUS       |
        ====================================================================================
             Zone 1  Zone 2  Zone 3 ........ Zone n-1  Zone n
                             

            NOTES :
            

                En partie REMPLACEMENT, CHACUNE des n ZONES,  \1, \2, ..., \n , peut tre ABSENTE ou PRSENTE,  une
                                                
                    position QUELCONQUE, par RAPPORT aux zones ADJACENTES
                                     

                    EXEMPLES :
                    

                        \4\3 , en partie REMPLACEMENT, ne CONSERVE, dans un FICHIER dcoup en 5 ZONES, QUE les
                                                                         
                            ZONES 3 et 4, INTERVERTIES, en OMETTANT les 2 PREMIRES et la DERNIRE zone de CHAQUE ligne
                                                              


                        N \1|\2|\3 \: \n , en partie REMPLACEMENT, ne CONSERVE, dans un FICHIER dcoup en n ZONES,
                                                                       
                            QUE les 3 PREMIRES et la DERNIRE zones avec :
                                        

                                - la CHANE 'N '   AVANT la ZONE 1
                                                          
                                - le SPARATEUR '|' ENTRE les ZONES 1 et 2 et ENTRE les ZONES 2 et 3
                                                                                 
                                - la CHANE ' : '   ENTRE les ZONES 3 et n
                                                                 

                                      Le SIGNE : est un MTA-CARACTRE, en partie REMPLACEMENT
                                                             

                                          =>  il est donc CRIT sous la FORME \:
                                                                         


51) DPLACEMENT et/ou SUPPRESSION de ZONES de TEXTE, DTERMINES par un SPARATEUR ( Cas GNRAL ) :
           

        HYPOTHSES :
        

            On UTILISE,  cet effet, un caractre SPARATEUR quelconque, qui n'EXISTE PAS encore dans le fichier COURANT
                                                        

            CHAQUE ligne du fichier COURANT est alors DCOUPE en ZONES  1, 2 ,3 ......., n, et CHACUNE d'elles, EXCEPT
                                                               
                la DERNIRE zone n, est SPARE de la SUIVANTE par ce caractre SPARATEUR
                                 

                    => Il y a donc, OBLIGATOIREMENT, n-1 SPARATEURS dans CHAQUE ligne du fichier COURANT
                                                        


        =======================================================================
        |                  Zone de                  |          Zone  de          |
        |                 RECHERCHE                 |        REMPLACEMENT        |
        =======================================================================
   (1)  |   (.*?#)(.*?#)(.*?#).........(.*?#)(.*)   |      Voir ci-DESSOUS       |
        -----------------------------------------------------------------------
   (2)  |   (.*?)#(.*?)#(.*?)#.........(.*?)#(.*)   |      Voir ci-DESSOUS       |
        =======================================================================
            Zn 1  Zn 2  Zn 3 ........ Zn n-1 Zn n
                           

            NOTES :
            

                Dans le TABLEAU ci-dessus, le SPARATEUR '#' peut tre REMPLAC par n'IMPORTE QUEL AUTRE caractre
                                                         

                    Cependant, s'il est, GALEMENT, un MTA-caractre de RECHERCHE, placer le CARACTRE '\' DEVANT
                                                                           


                Si le caractre SPARATEUR, NE doit PAS tre CONSERV, APRS remplacement, on utilisera plutt le CAS 2
                                                                      


                En partie REMPLACEMENT, CHACUNE des n ZONES,  \1, \2, ..., \n , peut tre ABSENTE ou PRSENTE,  une
                                                
                    position QUELCONQUE, par RAPPORT aux zones ADJACENTES
                                     

                    EXEMPLES :
                    

                        \4#\3 , en partie REMPLACEMENT, avec le CAS 1, ne CONSERVE, dans un FICHIER dcoup en 4 ZONES,
                                                                                  
                             QUE les ZONES 3 et 4, INTERVERTIES, en OMETTANT les 2 PREMIRES zones de CHAQUE ligne
                                                              

                             REMARQUES :
                             

                                 - la DERNIRE zone 4, NE finissant PAS par le SPARATEUR '#', il est AJOUT, APRS \4
                                                                            

                                 - Si ncessaire, SUPPRIMER le SPARATEUR '#', en FIN de ligne, suite RECOPIE de \3
                                                                        


                        --> \1 \2 \3\(\n\) , en partie REMPLACEMENT, avec le CAS 2, ne CONSERVE, dans un FICHIER dcoup
                                                    
                             en n ZONES, QUE les 3 PREMIRES et la DERNIRE zones avec :
                                              

                                - la CHANE '--> '   AVANT la ZONE 1
                                                          
                                - un caractre ESPACE ' ' ENTRE les ZONES 1 et 2 et ENTRE les ZONES 2 et 3
                                                                                 
                                - la ZONE 3, ENTOURE par l'ensemble PARENTHSE OUVRANTE - PARENTHSE FERMANTE
                                                       

                                      Les SIGNES '(' et ')' sont des MTA-CARACTRES, en partie REMPLACEMENT
                                                                         

                                          => ils sont donc CRITS sous la FORME \( et \)
                                                                              



52) SUPPRESSION des MOTS IDENTIQUES, EXCDENTAIRES, de CHAQUE ligne d'un FICHIER :
    


        ============================================================
        |            Zone de             |          Zone  de          |
        |           RECHERCHE            |        REMPLACEMENT        |
        ============================================================
        |    (\b(\w+)\b.*?),\2(,|\R)     |            \1\3            |
        ============================================================


            NOTES :
            

                TOUS les mots EXCDENTAIRES, situs  DROITE du mot MULTIPLE COURANT, sont SUPPRIMS, dans CHAQUE ligne
                                                           

                La VIRGULE, figurant DEUX fois, dans le TABLEAU ci-dessus, est le SPARATEUR des MOTS, dans CHAQUE ligne
                                                                       
                    Celui-ci peut tre REMPLAC par n'IMPORTE QUEL AUTRE caractre
                                              

                        Cependant, s'il est, GALEMENT, un MTA-caractre de RECHERCHE, placer le caractre '\' DEVANT
                                                                               


                Cette RECHERCHE-REMPLACEMENT peut se faire, en une SEULE PASSE, si on utilise le remplacement RCURSIF
                                                                
                    de la FENTRE " Find/Replace " ( CTRL + R ) du plugin " TextFX "
                                                        

                        - Se POSITIONNER  COMPTER de la ZONE du fichier COURANT  explorer ou au DBUT du fichier
                                                                     
                        - SLECTIONNER la FENTRE " Find/Replace " ( CTRL + R )
                                             
                        - COPIER les zones de RECHERCHE et de REMPLACEMENT, du TABLEAU ci-dessus
                                                    
                        - COCHER les DEUX cases " Regular Expr " et " Recurse Repl "
                                                
                        - COCHER, si ncessaire , la CASE " Wrap " pour une RECHERCHE sur TOUT le fichier
                                                                  
                        - CLIQUER sur le BOUTON " Find " pour SLECTIONNER la 1RE occurrence TROUVE de la RegExp
                                                               
                        - CLIQUER sur le BOUTON " Replace Rest " pour EXCUTER un remplacement GLOBAL, sur la zone
                                                                    
                              CHOISIE ou sur TOUT le fichier COURANT
                                      

                            REMARQUE :
                            

                               L'utilisation du BOUTON " Repl&FAgain " ( REMPLACEMENT au COUP par COUP ), n'est PAS
                                                                        
                                   POSSIBLE, suite BUG !
                                           


                Si on utilise la boite de dialogue HABITUELLE ( CTRL + F ) et l'onglet " Remplacer ", la RECHERCHE-
                                                                              
                    REMPLACEMENT se fera en PLUSIEURS PASSES et portera NCESSAIREMENT sur TOUT le fichier COURANT
                                            

                        - COCHER les DEUX cases " Expression rgulire " et " Boucler "
                                                
                        - CLIQUER sur l'UN des BOUTONS " Remplacer " ou " Remplacer tout ", AUTANT de FOIS que ncessaire,
                                                            
                               pour effectuer TOUS les REMPLACEMENTS
                                              

                EXEMPLE :
                

                   Soit le FICHIER suivant, contenant une LISTE d'animaux de COMPAGNIE :
                                                   

                       |hamster|lapin|chat|chien|tortue|perroquet|

                       chat|chien|perroquet|chien|tortue|lapin|perroquet|hamster|hamster|hamster

                       perroquet|lapin|hamster|chat|chien|perroquet|chien|tortue|lapin|chat

                       chat|chien|perroquet|chien|tortue|chat|lapin|chat|hamster|perroquet|hamster

                       chien|tortue|chat|chat|chien|perroquet|chat|lapin|tortue|chat|perroquet|hamster

                       tortue|chat|chien|perroquet|chat|chien|tortue|chat|lapin|chien|chat|hamster|perroquet|chat|tortue



                   APRS une RECHERCHE-REMPLACEMENT, avec  (\b(\w+)\b.*?)\|\2(\||\R)  en partie RECHERCHE et  \1\3
                                                                       
                       en partie REMPLACEMENT, le FICHIER est TRANSFORM en :
                                                  

                           |hamster|lapin|chat|chien|tortue|perroquet|

                           chat|chien|perroquet|tortue|lapin|hamster

                           perroquet|lapin|hamster|chat|chien|tortue

                           chat|chien|perroquet|tortue|lapin|hamster

                           chien|tortue|chat|perroquet|lapin|hamster

                           tortue|chat|chien|perroquet|lapin|hamster




53) SUPPRESSION des LIGNES IDENTIQUES, EXCDENTAIRES, d'un FICHIER :
    


        =========================================================================      ============================
        |            Zone de             |          Zone  de          |   Bouton    |      |      Recherche SEULE       |
        |           RECHERCHE            |        REMPLACEMENT        | 'Remplacer' |      |     SANS Remplacement      |
        =========================================================================      ============================
   (1)  |           (.+\R)\1+            |             \1             |     Oui     |      |         (.+\R)\1+          |
        -------------------------------------------------------------------------      ----------------------------
   (2)  |     ((^.+\R)(?:.*\R)*?)\2      |             \1             |     NON     |      |                            |
        =========================================================================      ============================


            NOTES :
            

                Employer le CAS 1, quand les LIGNES, du fichier COURANT, ont t PRALABLEMENT TRIES. C'est le CAS
                                                                      
                    le PLUS RAPIDE ( Environ 60s pour un FICHIER de 634 lignes, DUPLIQU 39 fois de SUITE, soit
                                                               
                    24726 lignes en TOUT )
                               

                    REMARQUES :
                    

                        Le TRI sera fait par la FONCTION de TRI du PLUGIN " TextFX " ou par un autre UTILITAIRE
                                                                             

                        Le CAS 1 NE ncessite PAS de remplacement RCURSIF et la RECHERCHE-REMPLACEMENT peut donc tre
                                                    
                            ralise, INDIFFREMMENT, par l'UNE des DEUX botes de dialogue ( CTRL + H ) ou ( CTRL + R )
                                                                            

                        Le remplacement au COUP par COUP n'est POSSIBLE qu'avec la bote de dialogue ( CTRL + H )
                                                                               


                Employer le CAS 2, lorsque les LIGNES, du fichier COURANT, ne sont PAS TRIES. Ce CAS est TOUTEFOIS
                                                                        
                    NETTEMENT MOINS RAPIDE que le CAS 1 ( Environ 25 fois PLUS LENT ! )
                                       

                    REMARQUES :
                    

                        Le CAS 2 NCESSITE le remplacement RCURSIF et donc la RECHERCHE-REMPLACEMENT NE peut tre
                                                                  
                            ralise QUE par la bote de dialogue ( CTRL + R ) du PLUGIN " TextFX "
                                                                                

                        Le CAS 2 n'est PAS COMPATIBLE avec le REMPLACEMENT au COUP par COUP et ncessite OBLIGATOIREMENT
                                               
                            le remplacement GLOBAL
                                            

                        Si la TAILLE du FICHIER et/ou le NOMBRE de DOUBLONS sont IMPORTANTS, le RSULTAT du processus
                                                   
                            de RECHERCHE-REMPLACEMENT est gnralement trop LENT et finalement INCOHRENT !
                                                                     



54) REMPLACEMENT SIMULTAN de PLUSIEURS MOTS ou CARACTRES par d'AUTRES MOTS ou CARACTRES, dans CHAQUE ligne :
    


        ==========================================================================      ===========================
        |              Zone de              |               Zone  de                |      |      Recherche SEULE      |
        |             RECHERCHE             |             REMPLACEMENT              |      |     SANS Remplacement     |
        ==========================================================================      ===========================
        |  (Mot1)|(Mot2)|(Mot3)|...|(Motn)  |  (?1MotA)(?2MotB)(?3MotC)...(?nMotX)  |      |  Mot1|Mot2|Mot3|...|Motn  |
        ==========================================================================      ===========================


            NOTES :
            

                APRS REMPLACEMENT :
                

                    - MotA est SUBSTITU  Mot1
                              
                    - MotB est SUBSTITU  Mot2
                              
                    - MotC est SUBSTITU  Mot3
                              
                      .........................

                    - MotX est SUBSTITU  Motn
                              


                Les MOTS  Mot1, Mot2, .... et/ou  MotA, MotB, .... peuvent aussi REPRSENTER un caractre UNIQUE
                                                                     

                    Cependant, placer le CARACTRE '\' DEVANT celui-ci, s'il est GALEMENT :
                                                             

                        - un MTA-caractre de RECHERCHE,    dans la ZONE de RECHERCHE
                                              
                        - un MTA-caractre de REMPLACEMENT, dans la ZONE de REMPLACEMENT
                                           



 VI) Exemple FINAL avec EXPLICATIONS DTAILLES :
     


         Cette RECHERCHE-REMPLACEMENT, ci-aprs, a t CRITE sur un des FORUMS de NOTEPAD++, le 28 Octobre 2011
                                                        

         Consulter  http://sourceforge.net/projects/notepad-plus/forums/forum/331754/topic/4781855?message=10760819
                    

         En voici la TRADUCTION franaise :
                     

             casolol

             2011-10-28 02:54:59 PDT

             Salut tout le monde,

             J'utilise la nouvelle version 5.9.5 de Notepad++.

             TROIS problmes se posent  moi lors d'un FILTRAGE d'un fichier TEXTE.

             Heureusement, quelqu'un aura la solution ;)


             Je dsire effectuer les TROIS oprations ci-dessous, dans l'ORDRE indiqu :
                                                                    

                 - SUPPRIMER PLUSIEURS lignes COMMENANT et FINISSANT par un MOT-CL ( 'test1' - 'test2', dans l'exemple )
                                    
                       qui sont RPTES, PLUSIEURS fois dans le fichier.
                                  

                 - SUPPRIMER les DEUX PREMIERS et les QUATRE DERNIERS caractres de CHAQUE ligne RESTANTE.
                                               

                 - LISTER les caractres de CHAQUE bloc RESTANT en une SEULE ligne.
                                              


             Voici mon EXEMPLE :
                       

                 test1
                 drtztztr
                 ssd  345
                 33
                 test2
                 A 1         hh54
                 B 2	       hhm3
                 C 23      ahdf
                 D 456    ..g4
                 E 656    #h65

                 test1
                 dfd
                 df32
                 test2
                 A 4          ooh4
                 B 7		hhi-
                 C 86	ahfg
                 D 466	fg.g
                 E 446	jg6


             TAPE 1 :
             

                 SUPPRIMER TOUT caractre ENTRE les MOTS 'test1' et 'test2' ( et les DEUX mots 'test1' et 'test2' ) :
                                                                     

                     A 1         hh54
                     B 2	  hhm3
                     C 23	  ahdf
                     D 456	  ..g4
                     E 656	 #h65


                     A 4          ooh4
                     B 7	  hhi-
                     C 86	  ahfg
                     D 466	  fg.g
                     E 446      jg6


             TAPE 2 :
             

                 SUPPRIMER TOUS les caractres ADDITIONNELS de CHAQUE ligne ( hh54, hhm3,... ) :
                                     

                     A 1
                     B 2
                     C 23
                     D 456
                     E 656

                     A 4
                     B 7
                     C 86
                     D 466
                     E 446


             TAPE 3 :
             

                 SUPPRIMER le 1ER caractre et l'ESPACE qui la suit, dans CHAQUE ligne :
                                                    


                     1
                     2
                     23
                     456
                     656

                     4
                     7
                     86
                     466
                     446


             TAPE 4 :
             

                 Placer TOUS les caractres de CHAQUE bloc en une SEULE ligne :
                                                   

                     1 2 23 456 656
                     4 7 86 466 446


             Quelqu'un a-t-il une ide ? Quelqu'un peut-il y regarder et m'aider ?

             Merci d'avance,

             Amicalement,

             Marc



         Il existe une SOLUTION, qui, en une SEULE opration de RECHERCHE-REMPLACEMENT, donne le RSULTAT souhait !!!
                                                              


             LANCER notre diteur chri NOTEPAD++
                                  
             OUVRIR une NOUVEAU fichier avec le RACCOURCI ' CTRL + N '
                                               
             OUVRIR la fentre de RECHERCHE-REMPLACEMENT avec le RACCOURCI ' CTRL + H '
                                                
             Dans la zone de RECHERCHE,    CRIRE ou RECOPIER   (?s)(\R*test1.*?test2\R+)|(?-s)..(\d+).*\R(\R)*
                                                       
             Dans la zone de REMPLACEMENT, CRIRE ou RECOPIER   (?1:\2\3(?3: ))
                                                    
             COCHER la CASE " Expression rgulire "
                        
             DCOCHER les CASES " Respecter la casse " et " Boucler "
                                  

             Dans Adobe Reader, se RENDRE  la FIN de ce DESCRIPTIF, par le RACCOURCI ' CTRL + Fin '
                                                        
             RECOPIER TOUT le TEXTE, situe APRS la ligne de TIRETS, jusqu'en FIN de FICHIER
                                              

             Dans NOTEPAD++, COLLER ce TEXTE dans le fichier VIERGE, par le raccourci ' CTRL + V '
                                                          
             CLIQUER, enfin, sur le BOUTON " Remplacer tout "
                                      

                         ............................    WAOOOOOOU !   a dcoiffe !


                *****************************************************************************************
                *   Vous SAISISSEZ,  prsent, TOUTE la PUISSANCE des expressions RGULIRES PRCE !!!   *
                *****************************************************************************************


             EXPLICATIONS de la SYNTAXE utilise dans les DEUX zones de RECHERCHE et de REMPLACEMENT :
                                                 


                 La zone de RECHERCHE procde  DEUX recherches INDPENDANTES, SPARES par le signe d'ALTERNATION '|'
                                                                     

                     - La PREMIRE  (?s)(\R*test1.*?test2\R+)  recherche le BLOC, MULTI-lignes MINIMUM 'Test1... Test2',
                                                       
                           VENTUELLEMENT PRCD de lignes VIDES est SUIVI de lignes VIDES, reprsentant le GROUPE 1
                                                                        


                     - La DEUXIME  (?-s)..(\d+).*\R(\R)*  recherche un NOMBRE( GROUPE 2 ), PRCD de DEUX caractres,
                                                 
                            SUIVI de caractres QUELCONQUES, eux-mmes SUIVIS d'au MOINS UNE 'FIN de LIGNE'
                                                          

                                - Si une SUITE EXCDENTAIRE de 'FIN de LIGNE' EXISTE       => \R reprsente le GROUPE 3
                                                                         
                                - Si AUCUNE suite EXCDENTAIRE de 'FIN de LIGNE', APRS \R => Le GROUPE 3 est alors VIDE
                                                               


                 Dans la 1RE recherche, l'OPTION (?s) indique que le MTA-caractre POINT (.) reprsente TOUT caractre,
                                                                      
                     y COMPRIS les caractres 'FIN de LIGNE' => la RECHERCHE s'tend ainsi sur PLUSIEURS lignes
                                                                 


                 Dans la 2ME recherche, l'OPTION (?-s) indique le MTA-caractre POINT (.) reprsente,  NOUVEAU, un
                                                                       
                     caractre STANDARD, AUTRE que les TROIS caractres  \n (LF) , \r (CR)  et  \f (FF)
                                                                  


                 La zone de REMPLACEMENT correspond, aussi,  DEUX remplacements INDPENDANTS, SPARS par le SIGNE (:)
                                                                           

                     - Si le GROUPE 1 EXISTE (?1....:....), suite 1RE recherche TROUVE, on REMPLACE ce GROUPE 1 par
                                                                      
                           la partie situe APRS le n de GROUPE 1 et AVANT le SIGNE (:), c'est  dire la chane VIDE
                                                                          
                               => le BLOC 'Test1'......'Test2', PRCD et/ou SUIVI de 'FIN de LIGNE' est alors SUPPRIM
                                                               


                     - Si le GROUPE 1 N'existe PAS, suite 2ME recherche TROUVE, on REMPLACE la ligne COURANTE par
                                                                
                           la partie situe APRS le SIGNE (:) jusqu' la PARENTHSE FERMANTE du groupe CONDITIONNEL,
                                                                    
                           soit '\2\3(?3: )', c'est  dire par :
                                 

                               - le GROUPE 2, reprsentant le NOMBRE, puis
                                                       
                               - le GROUPE 3, qui est, en gnral, VIDE, EXCEPT quand il existe PLUSIEURS 'FIN de LIGNE'
                                                                              
                                     ( FIN de BLOC ), auquel cas \3 reprsente \R, soit le PASSAGE  la ligne SUIVANTE
                                                                            
                               - Une ESPACE, quand il n'y a PAS de 'FIN de LIGNE' EXCDENTAIRE ( PAS de GROUPE 3 )
                                                                    

                 NOTE :
                 

                     La partie REMPLACEMENT pourrait aussi s'crire, SANS les PARENTHSES :   '?1:\2\3?3: '
                                                               



 VII) CONCLUSION :
      

          Voil pratiquement QUATRE mois et DEMI que j'ai commenc cette DESCRIPTION des EXPRESSIONS RGULIRES PCRE !

              Enfin TERMIN ! J'espre qu'elle s'avrera UTILE pour RSOUDRE vos PROPRES besoins, en matire de

              RECHERCHES-REMPLACEMENTS.


          Il me serait bien DIFFICILE d'expliquer POURQUOI j'adore les EXPRESSIONS RGULIRES ! Peut-tre, est-ce

              parce que j'ai commenc l'informatique sous UNIX, avec comme SEUL diteur VI, il y a environ 35 ANS

              ou aussi, parce que j'ai TOUJOURS aim la PROGRAMMATION, en gnral ( quoique uniquement en QBASIC ! )

              Eh oui, l'ANNIVERSAIRE de mes 60 ANS, c'tait en Mai 2012 ! ( Mais..., rassurez-vous, comme dans BEAUCOUP

              de PAYS, je dois encore CONTINUER pour une RETRAITE  peu prs DCENTE :)! )


          L'AJOUT des EXPRESSIONS RGULIRES PCRE  NOTEPAD++ est une vraie AVANCE et DCUPLE les performances de
            
              l'diteur, malgr quelques BUGS, voqus dans ce MANUEL, qui seront TRS VITE rpars, je n'en doute pas !
              

          Voici bientt QUATRE ans que je " suis " NOTEPAD++ ( depuis la version 4.9.2 EXACTEMENT ! ). Mais, ce n'est

              QUE MAINTENANT, que j'interviens, ENFIN, dans les FORUMS ! Accordez-moi une priode de MISE en ROUTE,

              et je serai alors tout dispos,  vous AIDER  la CRATION de vos RECHERCHES-REMPLACEMENTS spcifiques !


          Bien entendu, toute SUGGESTION, CRITIQUE, AMLIORATION, ainsi que toute ERREUR dtecte, concernant ce
                        
              DESCRIPTIF, seront les BIENVENUES. Toutefois, mon activit de TECHNICIEN informatique ITINRANT est assez
              
              PRENANTE. Aussi, ne soyez pas TONNS si je ne vous semble pas trs RACTIF !



     ANNEXE :
     

         Exemple FINAL de casolol, avec AJOUT de lignes VIDES + un COUPLE test1 - test2 mis en MAJUSCULES :
                                                     

             - SLECTIONNER, dans Adobe Reader, le TEXTE, situ JUSTE APRS la ligne de TIRETS, ci-dessous
                                            

             - RECOPIER celui-ci dans le PRESSE-PAPIERS par le RACCOURCI habituel CTRL + C
                                                            

             - Ouvrir NOTEPAD++ et COLLER ce TEXTE, dans un NOUVEAU fichier, par CTRL + V
                                                           

             - EXCUTER la RECHERCHE-REMPLACEMENT, dcrite au CHAPITRE VI, ci-dessus
                                        

             - ADMIREZ ......!!!!!


-------------------------------------

test1
drtztztr
ssd  345
33
test2



A 1         hh54
B 2	       hhm3
C 23      ahdf
D 456    ..g4
E 656    #h65




TEST1
dfd
df32
TEST2



A 4          ooh4
B 7		hhi-
C 86	ahfg
D 466	fg.g
E 446	jg6

