ProgrammazioneSviluppatore Perl

Elenca le caratteristiche delle espressioni regolari di Perl. Quali modificatori esistono e come gestire correttamente i risultati della corrispondenza? Fornisci un esempio di parsing di una stringa utilizzando un'espressione regolare.

Supera i colloqui con l'assistente IA Hintsage

Risposta

Perl è uno dei linguaggi più potenti per lavorare con le espressioni regolari. Per le corrispondenze si utilizzano gli operatori =~ e !~.

Modificatori delle espressioni regolari:

  • i — insensibile al caso
  • g — ricerca globale (tutte le occorrenze)
  • m — modalità multilinea (funziona ^ e $ su ogni riga)
  • s — il punto (.) include il carattere di nuova linea

Esempio:

my $text = "La mia email: max@mail.com e ann@ya.ru."; while ($text =~ /([\w.]+@[\w.]+)/g) { print "Email: $1 "; }

In questo esempio, il ciclo estrae tutte le email dalla stringa.

Dopo la corrispondenza, i valori vengono catturati in variabili speciali $1, $2, ... (per ogni gruppo di cattura).

Domanda trabocchetto

Cosa verrà memorizzato nella variabile $1 dopo una ricerca non riuscita con l'espressione regolare?

Risposta:

$1 non si aggiorna in caso di corrispondenza non riuscita — conserva il valore dell'ultima corrispondenza riuscita. Questo può essere una fonte di errori! Per evitarlo, in condizioni complesse è meglio azzerare esplicitamente $1, $2, ...

Esempi di errori reali a causa della mancanza di conoscenza delle sottigliezze del tema


Storia

La validazione dei dati in ingresso con un'espressione regolare complessa dipendeva dal valore di $1. Dopo una corrispondenza non riuscita, la variabile $1 non era cambiata, e il processo è andato avanti con il vecchio indirizzo email errato.


Storia

Un programmatore ha sbagliato modificatore. In un lungo testo è stato applicato /abc/g, pensando alla modalità multilinea. Di conseguenza, il pattern non trovava le righe necessarie con i ritorni a capo, mentre bisognava usare /abc/ms.


Storia

Nel progetto è stato dimenticato di utilizzare il flag globale /g durante la ricerca di tutte le occorrenze. Conseguenza — lo script estraeva solo la prima corrispondenza, mentre l'utente si aspettava un elenco completo di dati.