Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-03-2008, 08:13   #1
Zebra75
Member
 
Iscritto dal: Jun 2001
Messaggi: 40
[C] espressioni regolari

Le espressioni regolari mi pare di aver capito, che sono il modello di stringa che ci aspettiamo in input e il pattern mostrato nel codice, dovrebbe esserne un esempio. Come dovrebbe essere la parte relativa di codice che effettua la verifica di quanto digitato dall'utente ?
Sarebbe il parser ?

Codice:
char *pattern = "/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/";
__________________
La vita è una bella donna che si da soltanto a chi la tratterà con più ottimismo

Ultima modifica di Zebra75 : 27-03-2008 alle 11:23.
Zebra75 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2008, 18:08   #2
Zebra75
Member
 
Iscritto dal: Jun 2001
Messaggi: 40
ma ho fatto una domanda così strana oppure sarebbe troppo onerosa in termini di tempo una risposta ?
__________________
La vita è una bella donna che si da soltanto a chi la tratterà con più ottimismo
Zebra75 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2008, 18:32   #3
wizard1993
Senior Member
 
L'Avatar di wizard1993
 
Iscritto dal: Apr 2006
Messaggi: 22462
io ti dirò la verità quello mi sembra tutto tranne c, semmi quello e js
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza
wizard1993 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2008, 19:16   #4
Zebra75
Member
 
Iscritto dal: Jun 2001
Messaggi: 40
Quote:
Originariamente inviato da wizard1993 Guarda i messaggi
io ti dirò la verità quello mi sembra tutto tranne c, semmi quello e js
ed hai ragione, ma lo avevo anche scritto che lo scorcio di programma era in javascript!
Siccome mi interessava incollare un pattern già fatto su cui discutere, quello che ho trovato è stato quello.
__________________
La vita è una bella donna che si da soltanto a chi la tratterà con più ottimismo
Zebra75 è offline   Rispondi citando il messaggio o parte di esso
Old 27-03-2008, 00:46   #5
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da Zebra75 Guarda i messaggi
ma ho fatto una domanda così strana oppure sarebbe troppo onerosa in termini di tempo una risposta ?
Io non ho proprio capito la domanda, non ho capito che ci azzecca il C nel topic e non ho nemmeno capito se vuoi scrivere qualcosa o vuoi capire come funziona quel codice o il pattern matching in se.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 27-03-2008, 10:24   #6
Zebra75
Member
 
Iscritto dal: Jun 2001
Messaggi: 40
Quote:
Originariamente inviato da mjordan Guarda i messaggi
Io non ho proprio capito la domanda, non ho capito che ci azzecca il C nel topic e non ho nemmeno capito se vuoi scrivere qualcosa o vuoi capire come funziona quel codice o il pattern matching in se.
credo invece che tu abbia capito!
Mi interessa capire come funziona il pattern matching in se
__________________
La vita è una bella donna che si da soltanto a chi la tratterà con più ottimismo
Zebra75 è offline   Rispondi citando il messaggio o parte di esso
Old 27-03-2008, 13:30   #7
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da Zebra75 Guarda i messaggi
credo invece che tu abbia capito!
Mi interessa capire come funziona il pattern matching in se
Ah allora la risposta non è difficile.
Ci sono tantissimi metodi per realizzare il pattern matching, tutte varianti specializzate del piu' generico string matching.
Il vero problema, in questo caso, non è tanto l'implementazione in se quanto trovare un'implementazione che sia efficiente. In genere per realizzare string/pattern matching ci si basa sull'algoritmo di Knuth-Morris-Pratt (detto semplicemente algoritmo KMP)
Ulteriori dettagli li trovi ovunque, anche implementazioni (molto spesso in C).

Ultima modifica di mjordan : 27-03-2008 alle 13:53.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 07:46   #8
Zebra75
Member
 
Iscritto dal: Jun 2001
Messaggi: 40
Quote:
Originariamente inviato da mjordan Guarda i messaggi
Ah allora la risposta non è difficile.
Ci sono tantissimi metodi per realizzare il pattern matching, tutte varianti specializzate del piu' generico string matching.
Il vero problema, in questo caso, non è tanto l'implementazione in se quanto trovare un'implementazione che sia efficiente. In genere per realizzare string/pattern matching ci si basa sull'algoritmo di Knuth-Morris-Pratt (detto semplicemente algoritmo KMP)
Ulteriori dettagli li trovi ovunque, anche implementazioni (molto spesso in C).


quindi avendo una espressione regolare com e questa:
"/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/"

come farebbe un ipotetico codice in C a verificare l'input di un utente ?

Mi basterebbe anche una spiegazione testuale senza alcuna implementazione giacchè quello che mi preme conoscere è il meccanismo di riconoscimento.
__________________
La vita è una bella donna che si da soltanto a chi la tratterà con più ottimismo
Zebra75 è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 15:35   #9
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da Zebra75 Guarda i messaggi
quindi avendo una espressione regolare com e questa:
"/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/"

come farebbe un ipotetico codice in C a verificare l'input di un utente ?

Mi basterebbe anche una spiegazione testuale senza alcuna implementazione giacchè quello che mi preme conoscere è il meccanismo di riconoscimento.
In C, per lo meno nella libreria standard, non hai funzioni che gestiscono espressioni regolari. Se tu volessi gestirle hai solo tre vie:
1) Usare una libreria atta allo scopo (la via preferita)
2) Implementare da te un sistema che le gestisca (tedioso e comunque non privo di alcun fondamento scientifico da poter essere fatto in 5 minuti senza alcuna conoscenza).
3) Implementare un piccolo parser di espressioni regolari mediante l'uso di una grammatica regolare e qualche generatore di parser.

Siccome il punto 1) dipende dalla libreria che usi, ti do un'infarinatura su un possibile metodo di risoluzione del punto 2) che poi è il fondamento del punto 3)
Le espressioni regolari (come dice il nome stesso) sono classificate come "linguaggi regolari". I linguaggi regolari sono quei linguaggi che possono essere generati da grammatiche regolari, le cui grammatiche possono essere rappresentate mediante automi a stati finiti. Un'automa a stati finiti, a sua volta, può essere implementato effettivamente in un computer mediante una struttura dati detta grafo, appositamente modificata, che consente diverse operazioni in modo semplice. Determinare quindi quale stringa appartiene a quale espressione, si traduce quindi in due operazioni:
1) Visita sul grafo e determinazione della posizione successiva.
2) Confronto di stringhe.

Il confronto di stringhe generalmente lo si fa con l'algoritmo di Knuth-Morris-Pratt mentre i tradizionali algoritmi di visita dei grafi vengono applicati.

In ogni caso, se non hai nessuna conoscenza della teoria che sta dietro a queste cose piu' una buona conoscenza di base di algoritmi e strutture dati, hai praticamente zero possibilità di fare un'implementazione ad hoc. Potresti abbozzare qualcosa con le funzioni di stringa, ma non avresti la certezza che il funzionamento possa essere corretto per ogni input e comunque procedendo "abbozzando", potresti solo trattare una piccola casistica. Infatti ci sarebbe anche il problema del bilanciamento di eventuali parentesi, punteggiatura, ecc. che poi sono dettate dalla sintassi che si vuole considerare.

Io non so se è questo che volevi sapere, in genere per le regexp si usa una libreria e non ci si preoccupa di questi dettagli implementativi, che sono invece alla base di chi si occupa di linguaggi formali, compilatori, interpreti e quant'altro necessiti di confronto fra stringhe, generazione e matching. Alcuni anni fa implementai una shell Unix con un piccolo analizzatore di espressioni regolare per la gesione dei comandi in ambiente Linux/Solaris, utilizzando esclusivamente lo standard C, senza librerie esterne (a parte nCurses per la gestione del prompt piu' altre chicche). Purtroppo quel codice andò perso ma ci vollero circa 2000 righe di codice solo per la gestione dell'input da riga di comando (tralasciando tutta la gestione dei processi richiesta). Nonostane ciò, continuava ad essere un piccolo progetto universitario, quindi niente di che possa essere messo in produzione effettivamente (anche se gestiva praticamente in modo corretto anche i child process di init e KDE . Ne ero orgoglioso.
Fu un progetto di sistemi operativi, ma l'effettiva implementazione richiese conoscenze apprese in materie come compilatori, metodi formali dell'informatica e algoritmi e strutture dati. Implementare questa roba a "mano" nella pratica non si fa mai, a meno che, come ti dicevo prima, non si abbiano esigenze particolari (ma anche li basta usare un generatore di parser, quindi le casistiche di effettiva necessità sono ancora piu' ristrette).

Ultima modifica di mjordan : 28-03-2008 alle 15:58.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 17:40   #10
Zebra75
Member
 
Iscritto dal: Jun 2001
Messaggi: 40
ho fatto algoritmi e strutture dati ma non abbiamo studiato l'algoritmo da te esposto!

Ma matroidi, alberi binari, ternari, k-ari, grafi e compagni bella si, a iosa.

cmq, sei stato esaustivo ma mi è rimasto un dubbio. Partendo da questo "/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/"

il parser legge la parte in grassetto come se fossero delle istruzioni per lui ed analizza che i primi 6 caratteri siano formati da lettere

"/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/"

poi legge le successive istruzioni nelle regexp, sempre quelle in grassetto e ricavate le informazioni verifica che i successivi due caratteri siano realmente due numeri

e così via....

E' così che funzionerebbe ?



uhm............
però forse viene usato un albero binario
__________________
La vita è una bella donna che si da soltanto a chi la tratterà con più ottimismo

Ultima modifica di Zebra75 : 28-03-2008 alle 17:52.
Zebra75 è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 17:54   #11
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da Zebra75 Guarda i messaggi
ho fatto algoritmi e strutture dati ma non abbiamo studiato l'algoritmo da te esposto!

Ma matroidi, alberi binari, ternari, k-ari, grafi e compagni bella si, a iosa.
Perfetto allora hai tutte le nozioni per proseguire nella comprensione. Hai per caso il Cormen-Leiserson-Rivest come libro?

Quote:
cmq, sei stato esaustivo ma mi è rimasto un dubbio. Partendo da questo "/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/"

il parser legge la parte in grassetto come se fossero delle istruzioni per lui ed analizza che i primi 6 caratteri siano formati da lettere

"/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/"

poi legge le successive istruzioni nelle regexp, sempre quelle in grassetto e ricavate le informazioni verifica che i successivi due caratteri siano realmente due numeri

e così via....

E' così che funzionerebbe ?
Molto approssimativamente si. Ma proprio molto approssivamente. In pratica si effettua una tokenizzazione ad hoc della stringa e poi con le tecniche che ti ho detto si fa l'accettazione. Comunque se è il funzionamento, che ti interessa, puoi provare a scrivere quelle regole dando in pasto a Bison una bella grammatica che la descrive. Una volta fatto ciò, esso ti genererà un bell'analizzatore, che semplicemente lo puoi richiamare in un banale programma C da passare in un debugger per fare un'esecuzione "passo passo", cosi ti rendi conto effettivamente di tutti i passaggi computazionali che fa.

Per me un debugger è uno strumento indispensabile anche per leggere il codice, non solo per trovare errori.

Vale la pena di impararlo, soprattutto se ti interessi di queste cose:
http://www.gnu.org/software/bison/ma...le-GLR-Parsers

E' un tool meraviglioso. Le grammatiche che passerai sono molto simili alla forma normale di Backus, che ti divrebbe essere familiare.

EDIT: Con i matroidi e la programmazione lineare si possono fare dei semi miracoli quando si parla di strutture dati, visite e tempi di accesso (*cough* *cough* euristiche...)

Ultima modifica di mjordan : 28-03-2008 alle 18:07.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 18:02   #12
Zebra75
Member
 
Iscritto dal: Jun 2001
Messaggi: 40
abbiamo anche noi il Cormen come libro di testo che tra le altre cose, è stato corretto, nella versione italiana, dal nostro docente
__________________
La vita è una bella donna che si da soltanto a chi la tratterà con più ottimismo
Zebra75 è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 18:34   #13
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da Zebra75 Guarda i messaggi
abbiamo anche noi il Cormen come libro di testo che tra le altre cose, è stato corretto, nella versione italiana, dal nostro docente
Bene li l'algoritmo KMP c'è
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2008, 09:20   #14
Zebra75
Member
 
Iscritto dal: Jun 2001
Messaggi: 40
Quote:
Originariamente inviato da mjordan Guarda i messaggi
Bene li l'algoritmo KMP c'è


se non è troppo e se non ho compreso male, potresti dare in pasto a Bison quell'espressione rerolare e farmi vedere cosa ti genera ?
__________________
La vita è una bella donna che si da soltanto a chi la tratterà con più ottimismo
Zebra75 è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2008, 20:01   #15
Zebra75
Member
 
Iscritto dal: Jun 2001
Messaggi: 40
ho sbagliato thread, scusate
__________________
La vita è una bella donna che si da soltanto a chi la tratterà con più ottimismo

Ultima modifica di Zebra75 : 01-04-2008 alle 20:11.
Zebra75 è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2008, 10:42   #16
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da Zebra75 Guarda i messaggi
se non è troppo e se non ho compreso male, potresti dare in pasto a Bison quell'espressione rerolare e farmi vedere cosa ti genera ?
interesserebbe anche a me
misterx è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
LG UltraFine evo 6K: il primo monitor al...
DJI cambia direzione: investe in Elegoo ...
Black Friday Narwal 2025: risparmi da ca...
Phishing evoluto contro Apple ID: caso f...
Prestazioni in discesa nei giochi? NVIDI...
Addio ai banner dei cookie? L'UE spinge ...
Le offerte Black Friday per gli smartpho...
Il controllo qualità degli iPhone...
Qualcomm Snapdragon X Elite vola con il ...
A2RL Season 2: storia, innovazione e sor...
Core Ultra Series 3: Intel conferma l'ev...
Black Friday Amazon: la GeForce RTX 5070...
EcoFlow, il Black Friday porta grande ri...
Gli sconti più pesanti del Black ...
Smart #5 BRABUS segna il nuovo record di...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v