Andrey_ (Normal User)
Newbie
Messaggi: 2
Iscritto: 30/10/2011
|
Salve a tutti.
Qualcuno sa spiegarmi perché
Codice sorgente - presumibilmente Plain Text |
expr match "Mono: Playback 64 [100%" '.*\([1]*[0-9]*[0-9]%\)'
|
mi restituisce '0%'?
Voglio ottenere '100%'. Qualche idea?
Grazie in anticipo a chiunque mi darà una mano.
Ultima modifica effettuata da Andrey_ il 30/10/2011 alle 22:12 |
|
Andrey_ (Normal User)
Newbie
Messaggi: 2
Iscritto: 30/10/2011
|
Mi scuso, il problema riguarda essenzialmente il funzionamento di expr, e lo riscontro anche in espressioni semplici come:
Codice sorgente - presumibilmente Plain Text |
expr match "[100%]" ".*\([:digit:]*%\).*"
|
Probabilmente ora sarà più facile aiutarmi...
In sostanza expr ignora completamente [ igit:]* e mi restituisce soltanto %.
Oppure sono io scemo.
Ultima modifica effettuata da Andrey_ il 31/10/2011 alle 0:30 |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ha ragione "lui" in entrambi i casi
Infatti nel primo caso hai specificato "[1]*[0-9]*[0-9]%", il che significa "zero o più 1, seguiti da zero o più cifre, seguite da una cifra, e poi un segno %". "0%" soddisfa l'espressione regolare nel caso in cui non ci siano occorrenze dei primi due gruppi.
Analogamente nel secondo caso, in cui [igit:] può apparire zero o più volte. Ti matcha l'espressione in cui appare zero volte.
E' tuttavia curioso poiché, in genere, gli interpreti di espressioni regolari prendono dove possibile il match più lungo. Infatti esistono i quantificatori lazy, il cui scopo è far prendere esplicitamente i match più corti.
Secondo me potresti modificare il comportamento di default passando dei parametri a expr. Perché non usi grep?
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Codice sorgente - presumibilmente Plain Text |
expr match "[100%]" ".*\[\([:digit:]*%\)\].*"
|
* indica 0 o piu' occorrenze degli elementi nel set digit. "%" e' un valido match perche' ha 0 occorrenze. Specificando nell'espressione che il tutto dev'essere incluso tra parentesi quadre forza l'espressione ad includere anche il numero.
|
|