2009-09-20 15 views
11

Data la seguente stringa, come posso abbinare l'intero numero alla fine di esso?Numero di corrispondenza alla fine della stringa

$string = "Conacu P PPL Europe/Bucharest 680979"; 

Devo dire che la lunghezza della stringa non è costante.

La mia lingua preferita è PHP.

Grazie.

risposta

35

Si potrebbe usare una regex con preg_match, in questo modo:

$string = "Conacu P PPL Europe/Bucharest 680979"; 

$matches = array(); 
if (preg_match('#(\d+)$#', $string, $matches)) { 
    var_dump($matches[1]); 
} 

E avrai:

string '680979' (length=6) 

Ed ecco alcune informazioni:

  • Il # a l'inizio e la fine della regex sono i delimitatori - non significano nulla: indicano solo l'inizio e la fine della regex; e si potrebbe usare qualsiasi carattere desiderato (le persone spesso usano /)
  • Il '$' alla fine del modello significa "fine della stringa"
  • il () significa che si desidera catturare ciò che è tra di loro
    • con preg_match, l'array dato come terzo parametro conterrà tali dati catturati
    • il primo elemento di tale array sarà tutto abbinato stringa
    • ed i successivi conterranno ciascuno dei dati abbinati in un insieme di ()
  • le \d significa "un numero"
  • e + significa una o più volte

Quindi:

  • partita uno o più numeri
  • alla fine del la stringa

Per ulteriori informazioni, è possibile dare un'occhiata a PCRE Patterns e Pattern Syntax.

+2

c'è alcun particolare vantaggio di utilizzare # intorno alla vostra regex invece di /? Solo per mia curiosità? –

+0

Grazie, funziona bene. – Psyche

+0

Non è necessario il raggruppamento. '$ matches [0]' contiene già l'intera corrispondenza. – Gumbo

2

La seguente espressione regolare dovrebbe fare il trucco:

/(\d+)$/ 
+0

Per favore aggiungi una spiegazione come questione di una buona modellistica. – mickmackusa

1

EDIT: questa risposta controlla se l'ultimo carattere di una stringa è una cifra o meno. Poiché la domanda https://stackoverflow.com/q/12258656/1331430 è stata chiusa come un duplicato esatto di questo, inserirò qui la mia risposta. Tuttavia, per quanto riguarda l'OP di questa domanda, usa la risposta accettata.


Ecco la mia soluzione non regex per verificare se l'ultimo carattere di una stringa è una cifra:

if (ctype_digit(substr($string, -1))) { 
    //last character in string is a digit. 
} 

DEMO

substr passando inizio = -1 restituirà l'ultimo carattere del stringa, che viene quindi confrontata con ctype_digit che restituirà true se il carattere è una cifra o false in caso contrario.

Riferimenti:

  1. substr
  2. ctype_digit
Problemi correlati