2009-09-20 12 views
11

Dada la siguiente cadena, ¿cómo puedo hacer coincidir el número completo al final de la cadena?Número de coincidencia al final de la cadena

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

Tengo que decir que la longitud de la cuerda no es constante.

Mi idioma de elección es PHP.

Gracias.

Respuesta

35

Se podría utilizar una expresión regular con preg_match, así:

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

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

Y obtendrá:

string '680979' (length=6) 

Y aquí es un poco de información:

  • El # en el principio y el final de la expresión regular son los delimitadores, no significan nada: simplemente indican el comienzo y el final de la expresión regular; y se podía usar cualquier carácter que desea (la gente suele usar /)
  • El '$' al final del patrón significa "final de la cadena"
  • la () significa que desea capturar lo que está entre ellos
    • con preg_match, la matriz dada como tercer parámetro contendrá los datos capturados
    • el primer elemento en esa matriz será el conjunto igualada cadena
    • y las siguientes contendrán cada uno combinado de datos en un conjunto de ()
  • los \d significa "un número"
  • y la + significa uno o más tiempo

Así:

  • partido de uno o más número
  • al final de la cadena

Para obtener más información, puede echar un vistazo a PCRE Patterns y Pattern Syntax.

+2

¿Hay alguna ventaja en particular a la utilización de expresiones regulares # alrededor de su lugar de /? ¿Solo por mi propia curiosidad? –

+0

Gracias, funciona bien. – Psyche

+0

No necesita la agrupación. '$ matches [0]' ya contiene la coincidencia completa. – Gumbo

2

La siguiente expresión regular debe hacer el truco:

/(\d+)$/ 
+0

Agregue una explicación como cuestión de un buen modelo de roles. – mickmackusa

1

EDIT: comprueba esta respuesta si el último carácter de una cadena es un dígito o no. Como la pregunta https://stackoverflow.com/q/12258656/1331430 se cerró como un duplicado exacto de esta, publicaré mi respuesta aquí. Sin embargo, para lo que está pidiendo el OP de esta pregunta, use la respuesta aceptada.


aquí está mi solución no expresiones regulares para comprobar si el último carácter de una cadena es un dígito:

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

DEMO

substr pasar inicio = -1 devolverá el último carácter de la cadena, que luego se compara con ctype_digit que devolverá true si el carácter es un dígito, o false de lo contrario.

Referencias:

  1. substr
  2. ctype_digit
Cuestiones relacionadas