2009-07-29 4 views
8

Qualcuno mi sta dicendo che è necessario eseguire il escape di un punto e virgola in un'espressione regolare Perl letterale. Cioè, per abbinare una linea contenente un punto e virgola, dovrei usare /\;/ e non /;/.Devo eseguire il escape di un punto e virgola in un'espressione regolare Perl letterale?

Da quello che ho letto, il punto e virgola non ha alcun significato speciale in un'espressione regolare letterale, quindi evadere sembra inutile. Ho fatto alcuni esperimenti e /;/ sembra funzionare bene. Con gli avvisi attivati ​​e il pragma use strict; in vigore, perl non si lamenta.

C'è qualche motivo per cui /\;/ è migliore di /;/? Questa versione è dipendente?

risposta

12

Non è assolutamente necessario sfuggire a un punto e virgola in un modello di espressione regolare. Non c'è stato un tale bisogno da quasi dieci anni in cui ho usato Perl e dubito che sia mai esistito.

Un riassunto conciso di caratteri speciali e sequenze di escape è disponibile in perldoc perlreref.

1

No. /;/ dovrebbe sempre funzionare correttamente.

3

Forse questa è un'abitudine sviluppata dall'uso di perl one-liners sulla riga di comando e non di quoting, quindi il ';' dividere il resto in un altro comando? Comunque, come tutti gli altri dicono, non c'è bisogno.

+0

@Jefromi Hmmmm ... Sembra una buona ipotesi. Ero perso sul motivo per cui qualcuno avrebbe pensato che c'era un tale bisogno. –

5

Forse qualcuno pensa che il punto e virgola debba essere evaso perché l'evidenziazione della sintassi del loro editor viene confusa dal punto e virgola incorporato. Nella mia esperienza, molti redattori hanno molti problemi a gestire la sintassi di Perl. Ricorda, Only perl can parse Perl.

+0

@Adam Un'altra buona ipotesi. –

+1

OTOH, non dimenticare di http://search.cpan.org/perldoc/PPI –

+0

Wow, PPI è fantastico. Ed è un ottimo esempio di documentazione ben scritta, inclusa una buona descrizione del perché è così difficile da analizzare perl. –

0

Sì, il punto e virgola non è un metacarattere, quindi suppongo che non sia necessario sfuggire.

+0

@jeje Perché indovina? –

+0

@sinan Causa Non ho controllato prima di rispondere :) – jeje

Problemi correlati