Caputo's blog

Informatica, tecnologia, programmazione, fai da te, papercraft e papertoy

Tool per espressioni regolari

Marzo 23rd, 2011 by Giovanni Caputo

Le espressioni regolari identificano dei pattern, attraverso un insieme di regole, da applicare su stringhe. Sono uno strumento molto potente e sono implementati in tutti i linguaggi di programmazione.

 

Expresso (Win)

Expresso Using Regular Expressions: Tools and Resources

Rad Software Regular Expression Designer (Win)

regexdesigner Using Regular Expressions: Tools and Resources

The Regex Coach (Win)

regex coach Using Regular Expressions: Tools and Resources

RegExr Desktop (Win, Mac, Linux)

RegExr Desktop Using Regular Expressions: Tools and Resources

Regex Widget (Mac)

regex widget Using Regular Expressions: Tools and Resources

Regular Expressions Tester

2077 Using Regular Expressions: Tools and Resources

More:

Online Regex Tools

RegE xr

RegExr Using Regular Expressions: Tools and Resources

HTML2Regexp – Regular Expression Generator for HTML Element

html2regexp Using Regular Expressions: Tools and Resources

reWork

osteele Using Regular Expressions: Tools and Resources

Rubular

rubular Using Regular Expressions: Tools and Resources

Txt2re

txt2re Using Regular Expressions: Tools and Resources


Category: Programmazione | No Comments »

Modificare e testare espressioni regolari direttamente online

Dicembre 6th, 2009 by Giovanni Caputo

RegExr è un  tool online per modificare e testare espressioni regolari.

Category: Siti Web | No Comments »

Provare espressioni regolari con Regex Coach

Giugno 10th, 2009 by Giovanni Caputo

Le espressioni regolari possono essere utilizzate per identificare le stringhe in un testo.

Queste sono scritte in un linguaggio formale.

La sintassi di base delle espressioni regolari in UNIX è attualmente definita obsoleta dallo standard POSIX, ma è comunque molto usata a causa della sua diffusione. La maggior parte dei programmi che utilizzano le regexp, come grep e sed, utilizzano tali regole di base fornendo al contempo supporto per le nuove regole estese.

In questa sintassi, la maggior parte dei caratteri sono visti come letterali, e trovano solo se stessi (“a” trova “a”, “bc)” trova “bc)” ecc.). Le eccezioni a questa regola sono i metacaratteri:

. Trova ogni singolo carattere (se è nella modalità linea singola altrimenti se è in multiriga prende tutti i caratteri diversi da \n, ovvero un ritorno a capo).
[ ] Trova un singolo carattere contenuto nelle parentesi. Ad esempio, [abc] trova o una “a”, “b”, o “c”. [a-z] è un intervallo e trova ogni lettera minuscola dell’alfabeto. Possono esserci casi misti: [abcq-z] trova a, b, c, q, r, s, t, u, v, w, x, y, z, esattamente come [a-cq-z].Il carattere ‘-‘ è letterale solo se è primo o ultimo carattere nelle parentesi: [abc-] o [-abc]. Per trovare un carattere ‘[‘ o ‘]’, il modo più semplice è metterli primi all’interno delle parentesi: [][ab] trova ‘]’, ‘[‘, ‘a’ o ‘b’.
[^ ] Trova ogni singolo carattere non incluso nelle parentesi. Ad esempio, [^abc] trova ogni carattere diverso da “a”, “b”, o “c”. [^a-z] trova ogni singolo carattere che non sia una lettera minuscola. Come sopra, questi due metodi possono essere usati insieme.
^ Corrisponde all’inizio della stringa (o di ogni riga della stringa, quando usato in modalità multilinea)
$ Corrisponde alla fine della stringa o alla posizione immediatamente precedente un carattere di nuova linea (o alla fine di ogni riga della stringa, quando usato in modalità multilinea)
( ) Definisce una “sottoespressione marcata”. Ciò che è incluso nell’espressione, può essere richiamato in seguito. Vedi sotto, \n.
\n Dove n è una cifra da 1 a 9; trova ciò che la nesima sottoespressione ha trovato. Tale costrutto è teoricamente irregolare e non è stato adottato nella sintassi estesa delle regexp.
*
  • Un’espressione costituita da un singolo carattere seguito da “*”, trova zero o più copie di tale espressione. Ad esempio, “[xyz]*” trova “”, “x”, “y”, “zx”, “zyx”, e così via.
  • \n*, dove n è una cifra da 1 a 9, trova zero o più iterazioni di ciò che la nesima sottoespressione ha trovato. Ad esempio, “(a.)c\1*” trova “abcab” e “accac” ma non “abcac”.
  • Un’espressione racchiusa tra “\(” e “\)” seguita da “*” non è valida. In alcuni casi (es. /usr/bin/xpg4/grep di SunOS 5.8), trova zero o più ripetizioni della stringa che l’espressione racchiusa ha trovato. In altri casi (es. /usr/bin/grep di SunOS 5.8), trova ciò che l’espressione racchiusa ha trovato, seguita da un letterale “*”.
{x,y} Trova l’ultimo “blocco” almeno x volte e non più di y volte. Ad esempio, “a{3,5}” trova “aaa”, “aaaa” o “aaaaa”.

Vecchie versioni di grep non supportano il separatore alternativo “|”.

Esempi:

“.atto” trova ogni stringa di cinque caratteri come gatto, matto o patto
“[gm]atto” trova gatto e matto
“[^p]atto” trova tutte le combinazioni dell’espressione “.atto” tranne patto
“^[gm]atto” trova gatto e matto ma solo all’inizio di una riga
“[gm]atto$” trova gatto e matto ma solo alla fine di una riga

Dal momento che molte serie di caratteri variano a seconda della configurazione locale (in alcuni casi le lettere sono organizzate in abc..xyzABC…XYZ, in altri aAbB..yYzZ), lo standard POSIX ha definito alcune classi o categorie di caratteri come mostrato nella seguente tabella:

classe POSIX sintassi normale significato
[:upper:] [A-Z] lettere maiuscole
[:lower:] [a-z] lettere minuscole
[:alpha:] [A-Za-z] lettera sia maiuscole che minuscole
[:alnum:] [A-Za-z0-9] numeri e lettere maiuscole e minuscole
[:digit:] [0-9] numeri
[:xdigit:] [0-9A-Fa-f] numeri in formato esadecimale
[:punct:] [.,!?:…] segni di interpunzione
[:blank:] [ \t] spazio o TAB
[:space:] [ \t\n\r\f\v] caratteri vuoti
[:cntrl:] caratteri control
[:graph:] [^ \t\n\r\f\v] caratteri non vuoti
[:print:] [^\t\n\r\f\v] caratteri non vuoti e spazi

Le parentesi quadrate fanno parte della sintassi per indicare la classe di caratteri. Ad esempio [[:upper:][:digit:]ab] trova corrispondenza in una qualsiasi lettera maiuscola, in una qualsiasi cifra, nella lettera ‘a’ minuscola e nella lettera ‘b’ minuscola.

Tratto da wikipedia

Regex Coach è un software che permetti di effettuare prove con le espressioni regolari.

L’interfaccia è divisa in due riquadri di visualizzazione che contengono l’espressione regolare e la stringa di target. Il programma mette in evidenza automaticamente la parte delle stringa di target che combacia con l’espressione regolare.

http://weitz.de/regex-coach/shot.png

Category: Programmazione, programmi | No Comments »

Le espressioni regolari più utili in PHP

Maggio 9th, 2009 by Giovanni Caputo

Di seguito alcune espressioni regolari molto utili per chi programma in PHP. Naturalmente i controlli sono esclusivamente sintattici.

  1. Validare indirizzo email

    $email = "test@example.com";
    if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)) {
        echo "Your email is ok.";
    } else {
        echo "Wrong email address format";
    }

    Una soluzione migliore è usare filter_var.

    if (filter_var('test+email@fexample.com', FILTER_VALIDATE_EMAIL)) {
        echo "Your email is ok.";
    } else {
        echo "Wrong email address format.";
    }
  2. Validare usernames

    Validare username composti da caratteri alfanumerici (a-z, A-Z, 0-9), underscores, con minimo 5  e massimo 20 caratteri.

    $username = "user_name12";
    if (preg_match('/^[a-z\d_]{5,20}$/i', $username)) {
        echo "Your username is ok.";
    } else {
        echo "Wrong username format.";
    }
  3. Validare numeri telefonici

    In questo caso numeri telefonici americani,  semplice da adattare per quelli di altre nazionalità.

    $phone = "(021)423-2323";
    if (preg_match('/\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x', $phone)) {
        echo "Your phone number is ok.";
    } else {
        echo "Wrong phone number.";
    }
  4. Validare indirizzi IP

    $IP = "198.168.1.78";
    if (preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',$IP)) {
        echo "Your IP address is ok.";
    } else {
        echo "Wrong IP address.";
    }
  5. Validare codici postali

    Anche in questo caso validati codici postali statunitensi.

    $zipcode = "12345-5434";
    if (preg_match("/^([0-9]{5})(-[0-9]{4})?$/i",$zipcode)) {
        echo "Your Zip code is ok.";
    } else {
        echo "Wrong Zip code.";
    }
  6. Validare numeri di carta di credito

    $cc = "378282246310005";
    if (preg_match('/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$/', $cc)) {
        echo "Your credit card number is ok.";
    } else {
        echo "Wrong credit card number.";
    }
  7. Validare domini

    $url = "http://komunitasweb.com/";
    if (preg_match('/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i', $url)) {
        echo "Your url is ok.";
    } else {
        echo "Wrong url.";
    }
  8. Estrarre dominio da una certa URL

    echo $host;
    
    echo $text;
    $url = "http://komunitasweb.com/index.html";
    preg_match('@^(?:http://)?([^/]+)@i', $url, $matches);
    $host = $matches[1];

Read the rest of this entry »

Category: Programmazione, Siti Web, Tecnologia, tutorial | 1 Comment »