Newsgroup: it.comp.macintosh
Titolo: [OT] Ai guru delle espressioni regolari

Giuro che qualche giorno le imparerò....
Vorrei chiedervi se è possibile fare una cosa del genere. Avendo una
stringa di chiavi e valori divisi come:
<chiave>: valore\n
<chiave2>: valore2\n
...
...
<chiaven>: valoren
è possibile, tramite un'espressione regolare sapere se c'è una chiave
che contiene (o che è ha) come valore una determinata stringa in input.
Se si come?
Grazie a tutti
-- 
www.malcom-mac.com/blog
software development for Mac/Win
nemo - cocoa newsgroups reader for macintosh

 Se si come?
Dipende un pochino dall'ambiente (per esempio come vengono gestite le
"stringhe multilinea").
Poi vuoi solo sapere se c'è o vuoi anche "estrarre" il valore?
-- 
Ricordo che alla libertà di parola, è associata anche la libertà 
di pensiero. Purtroppo vedo che sempre più spesso si fa uso della 
prima e non della seconda.

 Poi vuoi solo sapere se c'è o vuoi anche "estrarre" il valore?
Possibilmente tutte e due.
Mi serve per cercare testo all'interno degli header dei messaggi dei
newsgroup.
Qualche esempio?


 newsgroup.
mhhh gli accapo degli header dei nius (e anche dei bodi peraltro) me li
ricordavo CRLF non un semplice \n
memoria corta o hanno cambiato la rfc977?

 Se si come?
io farei per ogni riga degli header la ricerca con
/^([^:]+): (.*ilmiopattern.*)$/
ed estrarrei chiave e valore con $1 e $2 (poi il come dipende
dall'implementazione delle espressioni regolari)
-- 
"Oggi più che a baciare si pensa a smanettare al computer su Internet"
                                                    -- Barbara Alberti

 dall'implementazione delle espressioni regolari)
Vi spiego. Questa č una colonna di un database SQLlite. Dentro c'č tutta
la stringa completa (n chiavi con n header separati da \n). L'idea era
quella di fare una query che cercasse dentro particolari chiavi senza
dovermi analizzare tramite operazioni di codice 'mio' ogni riga.
Se č possibile farlo tramite query sql con espre. regolari sarebbe
grandioso.
Di quello che hai scritto ci capisco veramente poco :(
Mettiamo che ho una stringa del genere:
chiave_1: valore_1\n
chiave_2: valore_2\n
chiave_3: valore_3
come faccio a (a) sapere il valore della chiave_2 e (b) verificare se
contiene una stringa ex: pippo?


 contiene una stringa ex: pippo?
uhm... non sono Giuseppe Maxia ;) ma sinceramente non credo che lo
standard SQL (e men che meno il dialetto supportato da sqlite) contempli
le espressioni regolari. Almeno cosi' dice il mio SQL in a Nutshell di
Kline & Kline.
Credo che tu debba per forza effettuare una ricerca a livello di
applicazione, sfoltendo dapprima i risultati con una query SQL "LIKE"
(...oppure rivedere il disegno del DB).
Setec Astronomy di it.comp.www.php ha scritto una classe PHP 5 per
effettuare ricerche fulltext con sqlite, non so se potrebbe tornarti
utile
-- 
"Oggi piů che a baciare si pensa a smanettare al computer su Internet"
                                                    -- Barbara Alberti

 utile
Non saprei proprio, uhm hai un link?
Intanto provo a cercare.



provo a darci un'occhiata...



...quello!
-- 
"Oggi più che a baciare si pensa a smanettare al computer su Internet"
                                                    -- Barbara Alberti

 ...quello!
Visto ma purtroppo non mi è molto utile. Ora ho scritto alla mlist di
sqlite vediamo se si riesce a tirar fuori qualcosa. Altrimenti farò come
ho scritto prima e via. Non credo neanche si senta molto la differenza.


 che contiene (o che č ha) come valore una determinata stringa in input.
Se devi cercare una stringa fissa, che senso ha usare le regex?
-- 
.: Jazzman :.
"Prendere per il culo era facile, il difficile era esserlo di fino"
                                               (R.Bounty su i.vr.d)

 ricordavo CRLF non un semplice \n
Quando sono spediti da rete hai ragione tu. La RFC scrive nero su bianco
(certo per POP, ma usare CRLF è comune a quasi tutti i protocolli
linebased, immagino anche per NNTP).
Tuttavia se vuole applicare la cosa anche ai messaggi che ha salvato su
disco (e che potrebbe avere manipolato) il terminatore potrebbe essere
\n, in quanto il formato mbox (per dire) si rifà alle convenzioni del
sistema operativo host.


 provo a darci un'occhiata...
Se stai facendo un'applicazione Cocoa, infilarci dentro uno script PHP è
puro masochismo. Se proprio non riesci a cavarcela da ObjectiveC in modo
pratico, usa Perl o Python.
Con Python so per certo che puoi fare applicazioni *miste* Py e
ObjectiveC.


 ObjectiveC.
No l'idea era quella di fare una query che già indicasse al suo interno
un filtro per cercare questa roba. Una cosa del tipo:
SELECT * FROM tavola WHERE headers <espressione regolare che cerca
dentro il valore di una chiave specifica>
Giusto per risparmiarmi codice objective-c. Ma ho deciso per un LIKE che
cerca nella colonna e un filtro aggiuntivo objc che cerca se la stringa
è proprio un quella chiave.


 mo' te stai propio aa'llarga` :-PPP
Scherzi a parte se guardi il modulo re di Python vedi che offre tutto il
supporto per le PCRE. Non ho scritto lo *stesso* supporto solo perchè
non ne sono certo, ma non sono nemmeno a conoscenza di una cosa che
funziona con le espressioni regolari di Perl e non con quelle di Python.


 s///e ?
In Python il parametro che indica l'espressione da sostituire, può
semplicemente essere una funzione cui viene passato l'oggetto "match"
(che contiene i vari \1 \2 etc...)
In pratica si può fare senza nessun problema.


 puro masochismo.
ovviamente non intendevo questo, ma di implementare in C o Obj-C gli
algoritmi usati nella classe PHP citata ;)


 vabbeh, come con javascript
ma in JavaScript 1.5 non /dovevano/ implmenentare le regular expression
compatibili con Perl 5? -_^


 funziona con le espressioni regolari di Perl e non con quelle di Python.
Forse il costrutto "(?{ code })". Da perlre:
  """
  This zero-width assertion evaluates any embedded Perl code.
  It always succeeds, and its "code" is not interpolated.  Cur-
  rently, the rules to determine where the "code" ends are
  somewhat convoluted.
  """
Personalmente non mi sognerei mai di usarlo in codice "vero",
ma eccone un'applicazione curiosa:
 
http://www.perlmonks.org/?node_id=180797
ciao,
S.
-- 
Stefano Rodighiero      |  
http://larsen.perlmonk.org/blog
mailto:
lar...@perl.it
   |  Italian Perl Mongers: 
http://www.perl.it

 un po' di giri in piu`, pero`.
No. Perl ti permette di infilarci un'espressione generica, python chiede
che sia una funzione. Se proprio vuoi metterci un'espressione senza
prefabbricarti la funzione, usi una lambda.
Come dire, stessa identica cosa. Solo fatta in modo tale da incoraggiare
una maggiore leggibilità, e qui non ha senso fare critiche, nel senso
che fa parte delle diverse filosofie dei linguaggi.


 Forse il costrutto "(?{ code })".
Ecco questo  hai ragione. Il costrutto in se e per se non esiste.
Ragion per cui (ammettendo il tuo commento) diventa chiaro il perchč
avevo parlato di "potenza utile".
comunque quell'oggettino li permette di fare un paio di cosette
prolog-like abbastanza interessanti.
-- 
Ricordo che alla libertŕ di parola, č associata anche la libertŕ 
di pensiero. Purtroppo vedo che sempre piů spesso si fa uso della 
