sabato 31 luglio - 02:47
Google
 
Menù
  Home
  Come nasce IRC-Zone
  Glossario Informatico
  News
  I nostri progetti
  I nostri servizi
  Partners
  Diventa un Partner

IRC
  Cos'è IRC
  Storia di IRC
  Netiquette su IRC
  Emoticons
  Gergo della chat
  Lista Servers
  RFC 1459
  Shell Hosting

mIRC
  Cos'è il mIRC
  FAQ mIRC
  Configurazione mIRC
  Download mIRC
  Novità
  Script Stranieri
  Script Italiani
  MTS
  MTS Engine

mIRC Addon
  mIRC addon Audio
  mIRC addon SMS
  mIRC addon Grafica
  mIRC addon Utility
  mIRC addon Uso Bot

Client IRC
  Client IRC Linux
  Client IRC Mac
  Client IRC Win

XChat
  Cos'è XChat
  XChat per Win
  XChat per Unix

KVirc
  Cos'è KVirc
  FAQ KVirc
  Installazione su Linux
  KVirc Scripting
  KVirc per Mac
  KVirc per Win
  KVirc per Unix
  KVirc addon

Irssi
  Cos'è Irssi
  Download Irssi
  Download Moduli

Eggdrop/Windrop
  Cos'è un Eggdrop
  Download Eggdrop
  Configurazione Eggdrop
  Download Windrop
  Installazione Windrop

Tcl
  Download TCL
  Tutorial TCL scripting
  Documenti/Guide

BNC
  Cos'è un psyBNC
  Download psyBNC
  Configurazione psyBNC
  Download sBNC
  Configurazione sBNC

Linkaci!
footer

Credits
Somerights

Donazione con Paypal
footer

Statistiche
Ip: 38.107.191.109
Download: 486119 file
Totale: 654577 MB

footer



Tutorial $regex

Autore: IRonData: 2005-09-01
Modificato: Documento non modificato Letture: 4120
Torna indietroStampa articoloInvia ad un amico

Le Regular Expressions, chiamate anche regex, sono un insieme di regole utili per la creazione di modelli di ricerca e di modifica di dati.
Il loro utilizzo ci permette di risparmiare in termini di codice, infatti possiamo ridurre una lunga serie di condizioni a un'unica regex rendendo il codice più comprensibile!
Nell'help del mIRC non troviamo molto a riguardo, infatti vengono indicati solamente gli identificatori e le loro funzioni, ma sull' utilità e su come creare una regex non veongono fornite informazioni..
L'help del mIRC esordisce così :

" Regular expressions are basically a grammar that can be used to perfom complicated pattern matching operations. You should already know how to use Regular expressions before using the identifiers below.
It is beyond the scope of this help file to explain how Regular Expressions work. There are many websites on the internet that introduce regular expressions and provide examples.
"

Seguendo il consiglio di Khaled e girando un pò sul web ho cercato di capire la sintassi delle regular expressions applicandola poi al mircscripting.
In ogni caso prima di parlare della sintassi, vediamo come mIRC tratta le regex e quali sono gli identificatori che supporta.

$regex([name], text, re)
Restituisce il numero di stringhe confrontate con la regex.


$regex(prot,IRon,on$) restituisce uno

E' importante ricordare che le regex sono case sensitive, cioè considerano diverse le maiuscole dalle minuscole, quindi :

$regex(IRon saluta tutti,^IR) che restituisce 1

sarà diverso da:

$regex(IRon saluta tutti,^ir) che restituisce 0

Da notare che in questo caso abbiamo omesso il nome, infatti mIRC ci consente di fare ciò e assegna un nome di default che sarà sovrascritto ad ogni chiamata. D'ora in avanti ometteremo sempre il nome.

-

$regml([name], N)
Fornisce un valore in seguito a una chiamata di $regex() e restituisce la stringa trovata.
Se N = 0 , restituisce il numero totale di stringhe trovate.

//echo -a $regex(IRon saluta tutti,(saluta|mangia)) - $regml(0) - $regml(1) - $regml(1).pos 

La proprietà .pos ci dice la posizione all'interno del testo della stringa trovata.

-

$regsub([name], text, re, subtext, %var)
Stessa funzione di $regex(), con la possibilità di effettuare una sostituzione mediante il subtext.
Restituisce N, il numero delle sostituzioni eseguite e salva il risultato in %var.


//echo -a $regsub(IRon saluta tutti,on,oFF, %i) - %i

-

Una volta chiarite le funzioni degli identificatori, passiamo a spiegare in che modo costruire una regex : per fare ciò è necessario introdurre alcuni operatori.
Naturalmente chi conosce già le regex e le ha utilizzate in altri linguaggi di programmazione sarà facilitato nella comprensione, tuttavia cercherò di essere più chiaro e preciso possibile affinchè anche coloro che affrontino per la prima volta l'argomento regex
riescano facilmente ad afferrare i concetti..
Per facilitare la comprensione dividiamo gli operatori in due gruppi : operatori qualitativi e operatori quantitativi.

-
-

OPERATORI QUALITATIVI:

^ : substringa all'inizio della stringa

Poniamo l'esempio di avere ^pane
Il matching avrà esito positivo solo se pane si troverà nelle prime 4 posizioni della stringa :

panettone  <- esito positivo

campane <- esito negativo

Vediamo alcuni esempi :

$regex(mirc,^mi)  Restituisce un valore booleano, in questo caso 1 corrispondente a TRUE

$regex(mirc,^r)  Restituisce 0 in quanto la substringa non viene trovata all'inizio del testo.

-

$ : substringa alla fine della stringa

E' l'esatto opposto dell'operatore precedente, infatti dà esito positivo solo se la substringa si trova alla fine della stringa..

$regex(tutorial regex,gex$) Restituisce 1

Cambiando la fine della stringa otterremo 0 :

$regex(tutorial regex scritto da IRon,gex$) Restituisce 0

Gli operatori ^ e $ possono essere anche utilizzati insieme per cercare una substringa che risulti uguale alla stringa :

$regex(Insane,^Insane$)

Ritorna 1 se c'è una corrispondenza, altrimenti, come abbiamo avuto modo di vedere negli altri casi, ritorna 0.

-

(...) : gruppo di substringhe

$regex(IRon is the best,(is|was|will be)) 

Restituisce 1 se la ricerca di almeno una delle tre substringhe indicate ha esito positivo, infatti avviene un confronto con la prima parte del pattern, se questa non viene trovata prova a cercare la seconda quindi la terza..
Attraverso le parentesi possiamo unire parti di espressione e creare patterns più complessi, in questo esempio notiamo che attraverso l'operatore di alternanza | (che corrisponde a or) è stato possibile allargare il matching a più di una substringa con un risparmio notevole di codice.

-

[...] : classe di caratteri

All'interno delle quadre và indicata la classe di caratteri a cui deve appartenere la sottostringa.

[0-9] Numeri
[A-Z] Lettere dell'alfabeto (maiuscole)
[a-z] Lettere dell'alfabeto (minuscole) (ricordiamo le regex sono case sensitive quindi occorreva elencare entrambe le classi)

$regex(44 gatti,[0-6]) Matching positivo, restituisce 1 in quanto 4 rientra nella classe [0-6]

$regex(tutorial by IRon,[a-f]$) Matching negativo, restituisce 0 in quanto la stringa dovrebbe terminare con una lettera minuscola appartenente alla classe [a-f], invece termina per n.

-

. (punto) : carattere qualsiasi

Supponiamo di avere il pattern .alice
Un matching di esso darà esito positivo solo se all'interno della stringa in cui si effettua la ricerca sia presente ad esempio

calice

salice

$regex(irc-zone.org il nuovo irc resource italiano,.esourc..) Ritorna 1

-
-

OPERATORI QUANTITATIVI

{n} : lunghezza pattern

Controlla che la lunghezza del pattern sia quella indicata..

$regex(Example for pattern lenght,t{2}) Restituisce 1

Controlla che all'interno della stringa vi sia la substringa "t" ripetuta due volte consecutivamente.

Il lenght può anche essere compreso fra due numeri {n,m} , questa operazione in mIRC necessita della creazione di una variabile e deve essere eseguita mediante script :

alias reg_lenght {
set %rl ciao{1,2}
echo -a $regex(ciaociao federico,%rl)
}

Restituisce 1 poichè la substringa "ciao" viene riscontrata 2 volta all'interno della stringa..
Naturalmente si tiene conto anche degli spazi, vale a dire che non vi deve essere nessun carattere fra le ripetizioni della substringa quindi

$regex(ciao ciao federico,%rl) Restituisce 0.

{n,} ritorna 1 matching positivo se la substringa è presente all'interno del testo almeno n volte.


-

+ : Trova 1 o più volte

$regex(abcde,c.+) Restituisce 1

Infatti viene richiesto che dopo la "c" ci sia almeno un carattere qualsiasi (in questo caso due).

-

* : Trova 0 o più volte

Simile a + , l'uso di questo operatore non è consigliato quando si ricerca 1 sottostringa che sia uguale alla stringa.Infatti controlla che il pattern esista 0 o più volte..


$regex(abcd,c*)

$regex(abcd,v*)

Restituisce in entrambi i casi 1

-

? : Trova 0 o 1 volta

Ha funzione simile a + e *.Cerca una substringa che può non esistere, se esiste deve essere presente 1 sola volta.

-
-

Un caso particolare si ha quando l'operatore fà parte della stringa di ricerca, cioè deve essere ricercato come carattere, e non deve fungere da operatore, in questo caso utilizzeremo l'escape (\).


$regex(www.irc-zone.org,www\.irc-zone) Si assicura che dopo www ci sia effettivamente il punto (.) e non un carattere qualsiasi.

$regex(Vince 100$ alla slot-machine,100\$) Cerca all'interno della stringa la substringa 100$, e non una stringa che finisca con 100.

-
-

A questo punto molti avranno capito come funzionano le regex, allora vediamo alcuni esempi che ci illustano in che modo possano essere applicate al mircscripting.

alias contr_nick {
  var %i = ^[\_\[\]\{\}a-zA-z]{1}[_\-\[\]\{\}a-zA-z-0-9]{1,29}$
  if ($regex($1,%i) == 1) { echo -a Valid Nickname }
  else { echo -a Erroneous Nickname [N/A] }
 }

 
 L'alias soprastante controlla la validità della sintassi di un nick.
Soffermiamoci sulla regex : innanzitutto il pattern viene loggato nella variabile %i
 e controlla che il primo carattere sia _ o una parentesi quadra (aperta o chiusa) o una graffa (aperta o chiusa) o una lettera compresa fra a e z e A e Z.
 Effettua anche un controllo sui restanti caratteri che compongono il nick assicurandosi che siano _ o - o una parentesi quadra (aperta o chiusa)
 o una graffa (aperta o chiusa) o una lettera compresa fra a e z e A e Z o un numero e che non sia lunghezza non superi i 29 caratteri ( che sommati alla prima lettera dà 30, lunghezza massima di un nick)
 
 
 alias contr_date {
 var %x = ^[0-9]{2}/[0-9]{2}/[0-9]{4}$
 if ($regex($1,%x == 1) { echo -a Valid date }
 else { echo -a Invalid date. Correct syntax is : dd/mm/yyyy }
 }

 
 Questo semplice alias si assicura attraverso una regex che la data inserita sia nel formato dd/mm/yyyy attraverso un controllo sulle classi e sulla lunghezza dei pattern.
 
-
-

 Con questi esempi si conclude il mio tutorial..spero di essere stato il più chiaro possibile ma soprattutto di essere stato esauriente.
 Alla prossima.





Branzilla Contest Redeem

Links utili

Newsletter
Iscriviti
Cancellati

Ci sono 84 iscritti

In rilievo..
  JackSMS v3
  Venom Script Lite

Documenti/Guide
  I Social Network
  Sicurezza in rete
  Cos'è SSL
  FAQ Bot
  Documenti su IRC
  FAQ Ident
  RFC 2810
  RFC 2811
  IRCx RFC

Informatica libera
  Gli Hoaxes
  Hoaxes report
  Documenti vari
  CensorWare
  Windows
  Linux

mIRC Scripting
  Codice ASCII
  Snippet mIRC scripting
  Tutorial mIRC scripting
  Dll per mIRC
  Utilities

IRCd
  Cos'è un IRCd
  Download Unreal
  Download Hybrid 6
  Download Hybrid 7
  Download Ultimate
  Download Bahamut
  Configurazione IRCd

IRC Services
  Cosa sono i Services
  Download Anope
  Download Epona
  Ircservices 5.0
  Ircservices 5.1
  Configurazione Epona
  Configurazione Anope
  Comandi ChanServ
  Comandi NickServ
  Comandi MemoServ

NeoStats
  Cosa sono i NeoStats
  Download NeoStats
  Configurazione NeoStats
  Download Moduli

IPv6
  Cos'è IPv6
  IPv6 su Win2000
  IPv6 su WinXP
  IPv6 su Linux
  IPv6 su mIRC e Xchat

Programmazione
  Tutorial C++
  Tutorial C
  Compilatori C/C++

Altro
  Contatti
  Banners Gallery

RSS Feed




Progetti
Starlight
IRCHippo

Links amici
Eushells.net
MF's IT User Essential Security Center

Validato CSS
Sito interamente sviluppato in PHP
MySQL
©2004+ IRC-Zone | Webmaster | Sitemap
Created by Cesare 'Kaesar83' Lasorella
Designed by Manuel 'erkokki' Cabras
IRC-Zone non è responsabile del contenuto dei siti linkati
Pagina creata in: 0.025 sec con 27 queries
Spampoison
Sviluppato con Notepad++
website monitoring service