Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188

    RE - dubbio con .? e .??

    Per un progetto, sto sviluppando delle regexp sotto Perl.

    Ho un dubbio riguardo l'uso del ? e ?? dentro la RE.

    Secondo voi, che differenza di output c'e` tra queste tre espressioni?
    codice:
    $s =~ s/([^\w\.])$k([^\w])/$1$m$2/gs;
    $s =~ s/(.?[^\w\.])$k([^\w].?)/$1$m$2/gs;
    $s =~ s/(.??[^\w\.])$k([^\w].??)/$1$m$2/gs;
    (l'unica differenza e` il carattere . seguito da uno o due ?)
    $m e $k sono delle variabili definite: devo sostituire $m al posto di $k in tutta la stringa, solo se $k non e` compreso tra caratteri alfanumerici e non e` preceduto da .

    Credevo che fossero equivalenti, invece la prima e la terza mi danno lo stesso risultato, mentre la seconda no (mi salta alcune sostituzioni nella stringa).

    Grazie in anticipo.
    Mich_
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  2. #2
    questo esempio tratto da perlre è molto esplicativo:

    For example:

    $_ = 'bar';
    s/\w??/<$&>/g;

    results in <>[b]<><a><><r><>. At each position of the string the best match given by non-greedy ?? is the zero-length match, and the second best match is what is matched by \w. Thus zero-length matches alternate with one-character-long matches.

    nota inoltre:

    ? Match 1 or 0 times
    ?? Match 0 or 1 times

    in pratica ".?" significa matchare un carattere qualunque o anche nessuno, ".??" matchare nessun o un carattere qualunque.

    per cui effettivamente la prima e la terza sono equivalenti, in quanto nella prima non viene preso in considerazione alcun carattere prima e dopo, nella terza si, ma prevale il match di zero caratteri. Nella seconda invece prevale la selezione di un carattere.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Grazie Shishii. Mi stavo scervellando per una cosa che ora e` banale.

    La spiegazione e` chiara e ragionevole.
    Nota che il perlre lo consulto almeno una volta al giorno in questo periodo, ma non avevo mai trovato (forse e` meglio dire notato) quella frase.

    Grazie ancora
    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.