Espressioni Regolari (Regex)

Le espressioni regolari(Regex), sono uno strumento potente per lavorare con le stringhe di testo. Sono utilizzate per cercare, sostituire e manipolare il testo in base a pattern specifici.

Cos’è una Regex?

Una Regex è una sequenza di caratteri che forma un pattern di ricerca. Questo pattern può essere utilizzato dalle funzioni di stringa in vari linguaggi di programmazione per trovare o sostituire testo.

Ad esempio, la regex a.b corrisponde a qualsiasi stringa che contenga un “a”, qualsiasi carattere, e poi un “b”. Quindi corrisponderebbe a “acb”, “a2b”, “a$b”, ecc.

Esempi delle espressioni regolari (Regex)

Ecco alcuni esempi comuni di regex:

  • ^abc: corrisponde a qualsiasi stringa che inizia con “abc”.
  • abc$: corrisponde a qualsiasi stringa che termina con “abc”.
  • a|b: corrisponde a qualsiasi stringa che contiene “a” o “b”.
  • a*: corrisponde a zero o più occorrenze di “a”.
  • a+: corrisponde a una o più occorrenze di “a”.
  • a?: corrisponde a zero o una occorrenza di “a”.

Utilizzo delle Regex

Le regex sono ampiamente utilizzate nella programmazione per una varietà di compiti. Ad esempio, possono essere utilizzate per validare l’input dell’utente, come un indirizzo email o un numero di telefono. Possono anche essere utilizzate per analizzare i log dei server, estrarre informazioni da file di testo, e molto altro ancora.

alcuni esempi più dettagliati e casi d’uso delle espressioni regolari:

  1. Validazione dell’email: Una delle applicazioni più comuni delle regex è la validazione dell’input dell’utente. Ad esempio, per verificare se un input è un indirizzo email valido, potresti usare una regex come questa:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

Con questa regex corrisponde a qualsiasi stringa che inizia e finisce con uno o più caratteri alfanumerici, seguiti da “@” e uno o più caratteri alfanumerici, un punto e due o più caratteri alfabetici.

  1. Estrazione di informazioni da un log del server: Le regex possono essere utilizzate per estrarre informazioni specifiche da un log del server. Ad esempio, potresti voler estrarre tutti gli indirizzi IP da un log. Potresti usare una regex come questa:
\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

Questa regex corrisponde a qualsiasi stringa che rappresenta un indirizzo IP valido.

  1. Sostituzione di testo: Le regex possono essere utilizzate per trovare e sostituire testo. Ad esempio, potresti voler sostituire tutte le occorrenze di “color” con “colour” in un documento. Potresti usare una regex come questa:
/color/g

La regex troverà tutte le occorrenze di “color” e le sostituirà con “colour”.

Esempi di Regex in alcuni linguaggi di programmazione

In ogni esempio, stiamo creando una regex che corrisponde alla stringa “abc”, e poi la usiamo per trovare tutte le occorrenze di “abc” in un’altra stringa. Ricorda, la sintassi specifica per creare e utilizzare regex può variare tra i diversi linguaggi di programmazione. 

Python

import re

# Trova tutte le occorrenze di "abc" in una stringa
result = re.findall("abc", "abcdefabcghi")

# Output: ['abc', 'abc']
print(result)

JavaScript

let str = "abcdefabcghi";
let regex = /abc/g;

// Trova tutte le occorrenze di "abc" in una stringa
let result = str.match(regex);

// Output: ['abc', 'abc']
console.log(result);

Java

import java.util.regex.*;

public class Main {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("abc");
        Matcher matcher = pattern.matcher("abcdefabcghi");

        // Trova tutte le occorrenze di "abc" in una stringa
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

PHP

<?php
$str = 'abcdefabcghi';
$matches = array();

// Trova tutte le occorrenze di "abc" in una stringa
preg_match_all('/abc/', $str, $matches);

// Output: Array ( [0] => Array ( [0] => abc [1] => abc ) )
print_r($matches);
?>

C

#include <regex.h>
#include <stdio.h>

int main() {
    regex_t regex;
    int ret;
    ret = regcomp(&regex, "abc", 0);
    if (ret) {
        printf("Could not compile regex\n");
        return 1;
    }

    char *str = "abcdefabcghi";
    regmatch_t matches[2]; // Assume we need only the first two matches

    // Find matches of "abc" in the string
    ret = regexec(&regex, str, 2, matches, 0);
    if (!ret) {
        printf("\"abc\" found at position %d to %d\n", matches[0].rm_so, matches[0].rm_eo);
        printf("\"abc\" found at position %d to %d\n", matches[1].rm_so, matches[1].rm_eo);
    } else if (ret == REG_NOMATCH) {
        printf("No match\n");
    } else {
        printf("Regex match failed\n");
        return 1;
    }

    // Free memory associated with the regex
    regfree(&regex);

    return 0;
}

Conclusione

Le espressioni regolari sono uno strumento potente e flessibile per lavorare con le stringhe. Con un po’ di pratica, sarai in grado di utilizzare le regex per risolvere una vasta gamma di problemi di programmazione.

Pubblicato da Carlo Contardi

Carlo Contardi, docente di informatica e sviluppatore Full Stack, condivide la sua passione per la programmazione e l’informatica attraverso il suo blog Space Coding. Offre preziosi consigli e soluzioni pratiche a chi vuole imparare a programmare o migliorare le proprie abilità. 🚀👨‍💻

Translate »