Cosa significa $ 1 in Perl? Inoltre, cosa significa $ 2? Quante variabili del numero $ ci sono?
risposta
Le $number
variabili contengono le parti della stringa che ha trovato il capture groups(...)
nel modello per la vostra ultima partita regex se la partita ha avuto successo.
Per esempio, prendete la seguente stringa:
$text = "the quick brown fox jumps over the lazy dog.";
Dopo la dichiarazione
$text =~ m/ (b.+?) /;
$1
uguale il testo "brown
".
Cattura, non raggruppamenti. –
e se ci saranno più di una partita? possiamo ottenere in qualche modo tutte le partite? – user1289
Le variabili numero sono le partite dell'ultimo successo partita o la sostituzione dell'operatore si è applicato:
my $string = 'abcdefghi';
if($string =~ /(abc)def(ghi)/) {
print "I found $1 and $2\n";
}
Verificare sempre che la partita o la sostituzione era successo prima di utilizzare $ 1 e così via. Altrimenti, potresti raccogliere gli avanzi da un'altra operazione.
Le espressioni regolari di Perl sono documentate in perlre.
Se ci sono sempre $ 1 e $ 9, qual è il valore se ci fossero meno di nove partite? –
$ 1 a $ 9 non sono sempre lì. Penso che Jim abbia letto male la pagina man. Sto citando la sezione pertinente: "Puoi avere tutte le parentesi che vuoi.Se hai più di 9 sottostringhe, le variabili $ 10, $ 11, ... si riferiscono alla sottostringa corrispondente. All'interno del pattern, \ 10, \ 11 , ecc., fai riferimento alle sottostringhe se ci sono state almeno tante parentesi a sinistra prima del backreference. Altrimenti (per compatibilità con le versioni precedenti) \ 10 è uguale a \ 010, un backspace e \ 11 uguale a \ 011, una scheda E così via. (\ 1 a \ 9 sono sempre backreferences.) " –
-1 per troppe mezze verità. Sono il risultato di catture, non la partita nel suo complesso. Sono impostati solo su partite riuscite, il che significa che è necessario verificare se la partita ha avuto successo prima di usarle.Come Alan ha già sottolineato, hai confuso il comportamento caso speciale della notazione backslash alternativa. –
Questi sono chiamati "variabili di corrispondenza". Come accennato in precedenza contengono il testo della tua ultima corrispondenza di espressioni regolari.
Maggiori informazioni qui: http://cslibrary.stanford.edu/108/EssentialPerl.html
(CTRL-F per il 'match variabili' per trovare la sezione corrispondente)
Le variabili $ 1 .. $ 9 sono anche leggere solo le variabili così non si può implicitamente assegnare un valore per loro:
$1 = 'foo'; print $1;
che restituirà un errore: Modifica di un valore di sola lettura tentato in linea di script 1.
Non è inoltre possibile utilizzare i numeri per l'inizio dei nomi di variabili:
$1foo = 'foo'; print $1foo;
Anche in questo caso viene visualizzato un errore.
Come altri hanno sottolineato, $ x sono variabili di cattura per le espressioni regolari che consentono di fare riferimento a sezioni di un modello abbinato.
Perl supporta anche acquisizioni denominate che potrebbero essere più facili da ricordare per l'uomo in alcuni casi.
dato ingresso: 111 222
/(\d+)\s+(\d+)/
$ 1 è 111
$ 2 è 222
Si potrebbe anche dire:
/(?<myvara>\d+)\s+(?<myvarb>\d+)/
$ + {myvara} è 111
$ + {myvarb} è 222
$ 1, $ 2, ecc conterrà il valore delle catture dall'ultimo successo partita - è importante verificare se la partita è riuscita prima di loro l'accesso, vale a dire
if ($var =~ m/()/) { # use $1 etc... }
un esempio del problema - $ 1 contiene 'rapida' in entrambe le istruzioni di stampa di seguito:
#!/usr/bin/perl
'Quick brown fox' =~ m{ (quick) }ix;
print "Found: $1\n";
'Lazy dog' =~ m{ (quick) }ix;
print "Found: $1\n";
ho il sospetto che non ci può essere fino a 2**32 -1
variabili partita numerati, su una a 32 bit compilato Perl binario.
In questioni di carattere generale per quanto riguarda le variabili "magici" in Perl si può rispondere, cercando in Perl documentazione di variabili predefinite a la:
perldoc perlvar
Tuttavia, quando si cerca questa documentazione per $ 1, ecc Troverete riferimenti in un numero di posti tranne la sezione su queste variabili "cifre". Bisogna cercare
$<digits>
avrei aggiunto che questo Brian's answer sia commentando o la modifica, ma non hanno abbastanza rep. Se qualcuno aggiunge questo, rimuoverò questa risposta.
Dal momento che lei ha chiesto ai gruppi di cattura, si potrebbe desiderare di sapere circa $ + troppo .. molto utile ..
use Data::Dumper;
$text="hiabc ihabc ads byexx eybxx";
while($text=~/(hi|ih)abc|(bye|eyb)xx/igs)
{
print Dumper $+;
}
OUTPUT:
$VAR1 = 'hi';
$VAR1 = 'ih';
$VAR1 = 'bye';
$VAR1 = 'eyb';
- 1. Che cosa significa "1;" significa in Perl?
- 2. Cosa significa = ~ significa in Perl
- 3. Che cosa significa "~~" in Perl?
- 4. Cosa significa "$$ q" in Perl?
- 5. Cosa significa per (;;) in Perl?
- 6. In tsql cosa significa tablename (1) significa
- 7. cosa significa "- [1,]" in "if (! - [1,] &&! Window.XMLHttpRequest)"?
- 8. Cosa significa 'risultato [:: - 1]'?
- 9. Ruby: cosa significa $ 1?
- 10. Che cosa significa <*> in Perl?
- 11. Cosa significa line.split (",") [1] significa [Java]?
- 12. Che cosa significa BUNDLE_DISABLE_SHARED_GEMS: '1'?
- 13. Che cosa significa varchar (-1)?
- 14. Che cosa significa _ITERATOR_DEBUG_LEVEL = 1?
- 15. Cosa significa 1 (mod N)?
- 16. Cosa significa "due punti" in Perl?
- 17. Cosa significa questa linea in perl?
- 18. Cosa significa $ NON-NLS-1 $?
- 19. Cosa significa "$ 1/*" in "per file in $ 1/*"
- 20. Cosa significa locals() ['_ [1]'] in Python?
- 21. Che cosa significa "WHERE 1" in SQL?
- 22. Cosa significa INT (1) in MySQL?
- 23. Che cosa significa [: -1] significa/fa in python?
- 24. Python: cosa significa x in A [1:] significa?
- 25. Cosa significa() alla fine della subroutine Perl?
- 26. Che cosa significa RegExp $ 1 Eseguire
- 27. Che cosa significa "Scalars leaked: 1"?
- 28. Che cosa significa "O (1) access time"?
- 29. Che cosa significa sizeof (int [1])?
- 30. Cosa significa: chiave = lambda x: x [1]?
E se ci fosse alcuna corrispondenza? – ojblass
Si potrebbe fare bene a controllare qualcosa come _Learning Perl_ o altre introduzioni a Perl che spiega le basi della lingua. –
Ora Brian, perché consiglieresti quel libro? I Monks sono una carità dopotutto ... –