Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.regexp > #240

Re: Regex qui supprime tout le reste de la ligne après le premier espace

From Olivier Miakinen <om+news@miakinen.net>
Newsgroups fr.comp.lang.regexp
Subject Re: Regex qui supprime tout le reste de la ligne après le premier espace
Date 2024-12-09 12:16 +0100
Organization There's no cabale
Message-ID <vj6jjh$27hh$1@cabale.usenet-fr.net> (permalink)
References <AABnVJ4ChAMAADSd.A3.flnews@yamo.pasdenom.info> <vj43g8$19ln$1@cabale.usenet-fr.net> <vj45br$1aii$1@cabale.usenet-fr.net> <vj67ja$an7$1@rasp.pasdenom.info>

Show all headers | View raw


Le 09/12/2024 08:52, yamo' a écrit :
> Salut,
> Merci à vous deux ! 
> Olivier Miakinen a écrit :
>> Le 08/12/2024 13:29, j'écrivais :
>>> 
>>> 1re solution sans assertions
>>> ============================
>>> 
>>> Remplacer :
>>> /^([^:][^ ]*?) .*/
>>> par :
>>> \1
> 
> Seulement ? 

Oui.

Ça veut dire la chose suivante :
  ^                Commencer au début de la ligne
  ([^:][^ ]*?)     Tout ce bloc sera capturé. Je le décris en détail en dessous
    [^:]             Le premier caractère ne doit pas être un deux-points
    [^ ]*?           Les caractères suivants ne doivent pas être des espaces
  (espace).*       Là on prend une espace puis tout ce qui suit jusqu'à la fin

Donc, d'après ce qui précède, si une ligne ne commence pas par un deux-points,
tous les premiers caractères sans espaces sont capturés par les parenthèses
(...), et à partir de la première espace c'est pris en compte mais pas capturé.

Du coup, quand on le remplace par $1 ou \1, cela veut dire qu'on ne recopie que
ce qui avait été capturé par les parenthèses.

>> Cette 1re solution peut convenir si ton moteur de regex n'est pas de type PCRE.
> 
> Encore un truc qui me rebute avec les regex mais c'est une des joies de 
> l'informatique où chacun peut développer sa norme dans son coin...

C'est surtout une raison historique. Au début les regexp n'étaient pas très
évoluées et on ne savait pas capturer avec des parenthèses, c'étaient donc
des caractères sans signification. Quand on a pensé à capturer avec des
parenthèses, ceux qui ont développé les regex améliorées ont préféré aller
au plus simple et écrire (...) pour la capture, ce qui force à écrire \( et
\) pour les protéger si on veut en faire des caractères normaux. Au contraire
dans les premières regex, pour garder la compatibilité avec l'existant on a
gardé ( et ) pour les caractères normaux et il a fallu écrire \(...\) pour
en faire des parenthèses capturantes.

Lorsque tout le monde sera passé au meilleur standard possible, à savoir PCRE
qui est devenu la norme dans tous les nouveaux langages, on ne se posera plus
de question. C'est un problème récurrent, comme les différents charsets
nationaux (CP850, CP1252, ISO-8859-1, ISO-8859-15, Shift-JIS, etc.) qui sont
de plus en plus souvent remplacés par UTF-8.

>>> Attention, selon ton type de regex il faudra peut-être écrire \( et \) à
>>> la place de ( et ), ou (inclusif) écrire $1 au lieu de \1.
> 
> Quand je comprends ce que je fais, j´échappe les caractères "spéciaux".
> 
>> N'étant pas de type PCRE, il y a différentes « saveurs » de regex, d'où les
>> différences possibles.
> 
> C'est un monde étrange ces regex...

cf. supra.

>>> 2e solution avec assertions
>>> ===========================
>>> 
>>> Remplacer :
>>> /(?<=^[^:][^ ]*?) .*/
>>> par rien.
> 
> !?
> 
>> Cette 2de solution est pour les regex de type PCRE.
> 
> Je vais regarder la solution de Jo Engo si elle fonctionne.

Oui, elle fonctionne parfaitement si tu dois transformer un fichier depuis un
shell plutôt que de faire la manip dans un programme en C/PHP/Python/whatever.

Il se trouve simplement qu'elle enchaîne deux regex au lieu d'une, comme je
l'ai expliqué dans ma réponse à son article. Vu que tu n'avais pas dit dans
quel contexte tu voulais utiliser une (ou plusieurs) regex, c'est pour ça que
j'ai donné plusieurs solutions.

-- 
Olivier Miakinen

Back to fr.comp.lang.regexp | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

Regex qui supprime tout le reste de la ligne après le premier espace yamo' <news@pasdenom.info> - 2024-12-07 20:12 +0100
  Re: Regex qui supprime tout le reste de la ligne après le premier espace Jo Engo <yl@icite.fr> - 2024-12-08 10:07 +0000
    Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-08 13:09 +0100
    Re: Regex qui supprime tout le reste de la ligne après le premier espace yamo' <news@pasdenom.info > - 2024-12-09 08:03 +0000
      Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-09 12:34 +0100
        Re: Regex qui supprime tout le reste de la ligne après le premier espace DV <dv@reply-to.not.invalid> - 2024-12-09 12:50 +0000
        Re: Regex qui supprime tout le reste de la ligne après le premier espace Otomatic <otomatic@oto.invalid> - 2024-12-09 18:08 +0100
          Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-10 02:29 +0100
            Re: Regex qui supprime tout le reste de la ligne après le premier espace yamo' <yamo@beurdin.invalid> - 2024-12-11 17:15 +0100
    Re: Regex qui supprime tout le reste de la ligne après le premier espace yamo' <yamo@beurdin.invalid> - 2024-12-11 17:16 +0100
      Re: Regex qui supprime tout le reste de la ligne après le premier espace Jo Engo <yl@icite.fr> - 2024-12-14 20:51 +0000
        Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-14 22:48 +0100
  Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-08 13:29 +0100
    Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-08 14:01 +0100
      Re: Regex qui supprime tout le reste de la ligne après le premier espace yamo' <news@pasdenom.info > - 2024-12-09 07:52 +0000
        Re: Regex qui supprime tout le reste de la ligne après le premier espace Olivier Miakinen <om+news@miakinen.net> - 2024-12-09 12:16 +0100

csiph-web