|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
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 |
|
|
|
|
|
#2 |
|
Senior Member
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 |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2003
Messaggi: 284
|
grazie,
nel frattempo avevo risolto chidendo e riaprendo la stringa: Codice:
^[0-9]{1,2}$|^100$|^999$
__________________
CANON A80 --> SX110 --> 550D |
|
|
|
|
|
#4 |
|
Senior Member
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 |
|
|
|
|
|
#5 |
|
Senior Member
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 |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Aug 2012
Messaggi: 268
|
Quote:
Codice:
egrep '^(|1)' Codice:
egrep '^(.|1)' |
|
|
|
|
|
|
#7 |
|
Senior Member
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 |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Aug 2012
Messaggi: 268
|
|
|
|
|
|
|
#9 |
|
Senior Member
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 16:50. |
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Aug 2012
Messaggi: 268
|
Quote:
Codice:
ls -pR | egrep -v '(^(|\..*:)|/)$' |
|
|
|
|
|
|
#11 |
|
Senior Member
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) |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Quote:
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
|
#13 | |
|
Member
Iscritto dal: Aug 2012
Messaggi: 268
|
Quote:
|
|
|
|
|
|
|
#14 | |
|
Member
Iscritto dal: Aug 2004
Messaggi: 39
|
Quote:
Codice:
# echo "ciccio" | grep -P '^(|1)' ciccio
__________________
Quello che davvero mi interessa è se Dio, quando creò il mondo, aveva scelta. |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Mi sa che hai ragione, sono un po' arrugginito, mi serve un bel ripasso.
|
|
|
|
|
|
#16 | |
|
Member
Iscritto dal: Aug 2012
Messaggi: 268
|
Quote:
|
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 39
|
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
__________________
Quello che davvero mi interessa è se Dio, quando creò il mondo, aveva scelta. |
|
|
|
|
|
#18 | |
|
Member
Iscritto dal: Aug 2012
Messaggi: 268
|
Quote:
io leggo ;greppa o stringa vuota o stringa che comincia con 1.Perchè mi stampa "ciccio"? |
|
|
|
|
|
|
#19 |
|
Senior Member
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. |
|
|
|
|
|
#20 | |
|
Member
Iscritto dal: Aug 2012
Messaggi: 268
|
Quote:
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"." |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:35.




















