Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2 implementa un mocio a nastro che esegue una pulizia dettagliata del pavimento di casa, in abbinamento ad un potente motore di aspirazione della polvere: un prodotto ideale per gestire in autonomia e con grande efficacia le necessità di pulizia dei pavimenti di casa
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-05-2013, 07:34   #1
candela
Member
 
L'Avatar di candela
 
Iscritto dal: May 2003
Messaggi: 284
regex pipe (|)

Buon giorno,
sto utilizzando le espressioni regolari per validare una serie di dati in un programma, ma ho dei problemi con le espressioni alternative.
Per esempio, un valore tra 0 e 100 con valore 999 per non noto.
le singole parti mi funzionano correttamente (nessuna di queste accetta 200):
^[0-9]{1,2}$
^100$
^999$
se faccio:
^[0-9]{1,2}|100|999$
non funziona più e mi accetta pure 200 (tanto per fare un esempio)!

Cosa sbaglio nelle condizioni con il | (pipe)?
grazie
__________________

CANON A80 --> SX110 --> 550D
candela è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2013, 08:29   #2
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
Codice:
^(999|[0-9][0-9]|100)$
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2013, 12:30   #3
candela
Member
 
L'Avatar di candela
 
Iscritto dal: May 2003
Messaggi: 284
grazie,
nel frattempo avevo risolto chidendo e riaprendo la stringa:
Codice:
^[0-9]{1,2}$|^100$|^999$
credi che ci sia differenza tra le due?
__________________

CANON A80 --> SX110 --> 550D
candela è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2013, 12:44   #4
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
il | usa tutto quello che c'è a destra o sinistra quindi se vuoi che ^$ sia sempre preso devi sempre riprenderlo

Pensala come

Codice:
a|b a "oppure" b

In alternativa se vuoi prendere abba|aba puoi usare abb?a (? rende opzionale la lettera precedente o gruppo se racchiuso tra () )
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2013, 12:46   #5
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
puoi provarle "live" qui cmq: http://regexpal.com/
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2014, 14:20   #6
toni00t
Member
 
Iscritto dal: Aug 2012
Messaggi: 268
Quote:
Originariamente inviato da The_ouroboros Guarda i messaggi
il | usa tutto quello che c'è a destra o sinistra quindi se vuoi che ^$ sia sempre preso devi sempre riprenderlo

Pensala come

Codice:
a|b a "oppure" b

In alternativa se vuoi prendere abba|aba puoi usare abb?a (? rende opzionale la lettera precedente o gruppo se racchiuso tra () )
qual'è la differenza tra
Codice:
egrep '^(|1)'
e

Codice:
egrep '^(.|1)'
?
toni00t è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2014, 14:25   #7
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
.


Sent from my iPad Air using Tapatalk
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2014, 15:03   #8
toni00t
Member
 
Iscritto dal: Aug 2012
Messaggi: 268
Quote:
Originariamente inviato da The_ouroboros Guarda i messaggi
.


Sent from my iPad Air using Tapatalk
??
toni00t è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2014, 15:11   #9
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Non credo che il pattern '^(|1)' sia sintatticamente corretto, stai chiedendo di identificare una stringa che inizia con "1" oppure con boh, il che non ha alcun senso, deve esserci sempre un espressione a sinistra del carattere "|".

Ultima modifica di Daniels118 : 21-11-2014 alle 15:50.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2014, 15:21   #10
toni00t
Member
 
Iscritto dal: Aug 2012
Messaggi: 268
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Non credo che il pattern '^(|1)' sia sintatticamente corretto, stai chiedendo di identificare una stringa che inizia con "1" oppure con boh, il che non ha alcun senso, deve esserci sempre un espressione a sinistra del carattere "|".
allora questo cosa vuol dire ?
Codice:
ls -pR | egrep -v '(^(|\..*:)|/)$'
toni00t è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2014, 15:47   #11
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Mi correggo, ha perfettamente senso, se non c'è nulla vuol dire che deve identificare una stringa vuota.
Tornando alla tua domanda quindi:
'^(|1)' prende tutte le righe vuote o che cominciano con "1"
'^(.|1)' prende tutte le righe che cominciano con un qualunque carattere o con "1" (che è una condizione superflua)
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2014, 15:51   #12
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Mi correggo, ha perfettamente senso, se non c'è nulla vuol dire che deve identificare una stringa vuota.
Tornando alla tua domanda quindi:
'^(|1)' prende tutte le righe vuote o che cominciano con "1"
'^(.|1)' prende tutte le righe che cominciano con un qualunque carattere o con "1" (che è una condizione superflua)
Infatti con .* prendi 0 o più caratteri (con .? 1 o più)
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2014, 16:09   #13
toni00t
Member
 
Iscritto dal: Aug 2012
Messaggi: 268
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Mi correggo, ha perfettamente senso, se non c'è nulla vuol dire che deve identificare una stringa vuota.
Tornando alla tua domanda quindi:
'^(|1)' prende tutte le righe vuote o che cominciano con "1"
'^(.|1)' prende tutte le righe che cominciano con un qualunque carattere o con "1" (che è una condizione superflua)
ok grazie adesso è chiaro
toni00t è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2014, 09:37   #14
SnakePlissken
Member
 
L'Avatar di SnakePlissken
 
Iscritto dal: Aug 2004
Messaggi: 39
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
'^(|1)' prende tutte le righe vuote o che cominciano con "1"
Non mi risulta: '^(|1)' prende tutte le righe.
  1. ^ prendi l'inizio della stringa
  2. (|1) prendi niente oppure prendi '1'

Codice:
# echo "ciccio" | grep -P '^(|1)'
ciccio
In questo caso prende prima l'inizio della stringa e poi niente (in pratica non consuma nessun carattere, e lo si può vedere aggiungendo l'opzione -o a grep). Se (in altri contesti) cattura solo righe vuote è perché ci sono impliciti ^ e $.
__________________
Quello che davvero mi interessa è se Dio, quando creò il mondo, aveva scelta.
SnakePlissken è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2014, 10:12   #15
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Mi sa che hai ragione, sono un po' arrugginito, mi serve un bel ripasso.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2014, 15:17   #16
toni00t
Member
 
Iscritto dal: Aug 2012
Messaggi: 268
Quote:
Originariamente inviato da SnakePlissken Guarda i messaggi
Non mi risulta: '^(|1)' prende tutte le righe.
  1. ^ prendi l'inizio della stringa
  2. (|1) prendi niente oppure prendi '1'

Codice:
# echo "ciccio" | grep -P '^(|1)'
ciccio
In questo caso prende prima l'inizio della stringa e poi niente (in pratica non consuma nessun carattere, e lo si può vedere aggiungendo l'opzione -o a grep). Se (in altri contesti) cattura solo righe vuote è perché ci sono impliciti ^ e $.
si ma tu hai usato le regex di Perl...
toni00t è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2014, 18:47   #17
SnakePlissken
Member
 
L'Avatar di SnakePlissken
 
Iscritto dal: Aug 2004
Messaggi: 39
Quote:
Originariamente inviato da toni00t Guarda i messaggi
si ma tu hai usato le regex di Perl...
Non ti far confondere dalla -P, quell'espressione vale nell'implementazione Perl, .NET, Javascript... L'unica differenza in questo caso è che senza -P devi fare l'escape dei caratteri speciali:
Codice:
# echo "ciccio" | grep '^\(\|1\)'
ciccio
Così ti torna?
__________________
Quello che davvero mi interessa è se Dio, quando creò il mondo, aveva scelta.
SnakePlissken è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2014, 19:12   #18
toni00t
Member
 
Iscritto dal: Aug 2012
Messaggi: 268
Quote:
Originariamente inviato da SnakePlissken Guarda i messaggi
Non ti far confondere dalla -P, quell'espressione vale nell'implementazione Perl, .NET, Javascript... L'unica differenza in questo caso è che senza -P devi fare l'escape dei caratteri speciali:
Codice:
# echo "ciccio" | grep '^\(\|1\)'
ciccio
Così ti torna?
sarà la stanchezza , ma mi sto confondendo :
io leggo ;greppa o stringa vuota o stringa che comincia con 1.Perchè mi stampa "ciccio"?
toni00t è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2014, 10:11   #19
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Perché non è corretto "greppa o stringa vuota o stringa che comincia con 1", ma tutte le stringhe che cominciano con una stringa vuota (e prima di qualunque stringa possiamo immaginare che ci sia una stringa vuota), e tutte quelle che cominciano con "1". La seconda condizione è inclusa nella prima, quindi l'espressione da riscontro per qualunque stringa.
Se invece l'espressione fosse stata '^(|1.*)$', oppure '^($|1)', sarebbe stata corretta la prima affermazione.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2014, 15:17   #20
toni00t
Member
 
Iscritto dal: Aug 2012
Messaggi: 268
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Perché non è corretto "greppa o stringa vuota o stringa che comincia con 1", ma tutte le stringhe che cominciano con una stringa vuota (e prima di qualunque stringa possiamo immaginare che ci sia una stringa vuota), e tutte quelle che cominciano con "1". La seconda condizione è inclusa nella prima, quindi l'espressione da riscontro per qualunque stringa.
Se invece l'espressione fosse stata '^(|1.*)$', oppure '^($|1)', sarebbe stata corretta la prima affermazione.
scusa , ma quello è un or logico non un and !
dovrebbe essere

"tutte le stringhe che cominciano con una stringa vuota (e prima di qualunque stringa possiamo immaginare che ci sia una stringa vuota), o tutte quelle che cominciano con "1"."
toni00t è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Narwal Flow 2: la pulizia di casa con un mocio a nastro Narwal Flow 2: la pulizia di casa con un mocio a...
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Claude Desktop e la modifica silenziosa ...
Blue Origin ha mostrato gli interni del ...
Linux alla pari di Windows in gioco: con...
Il rientro del secondo stadio del razzo ...
Il controller ufficiale Microsoft per Xb...
DJI Power 1000 Mini: la power station da...
IT Wallet sempre più aperto: in a...
Samsung pronta alla svolta: il Galaxy S2...
Segway Navimow i206 AWD, il robot taglia...
Zeekr 7GT debutta in Italia alla Milano ...
Ubisoft in difficoltà: Splinter C...
Tesla Cybertruck, numeri che fanno discu...
Intel Arc G3 Extreme: fino a 80W di pote...
SteelSeries Aerox 3 Wireless Gen 2 recen...
Tesla nel deserto senza batteria: il via...
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: 14:54.


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