2009-09-20 7 views
11

Étant donné la chaîne suivante, comment puis-je faire correspondre le nombre entier à la fin de la chaîne?Numéro de correspondance à la fin de la chaîne

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

Je dois dire que la longueur de la chaîne n'est pas constante.

La langue de mon choix est PHP.

Merci.

Répondre

35

Vous pouvez utiliser une expression rationnelle preg_match, comme ceci:

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

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

Et vous obtiendrez:

string '680979' (length=6) 

Et voici quelques informations:

  • Le # à le début et la fin de l'expression rationnelle sont les délimiteurs - ils ne signifient rien: ils indiquent simplement le début et la fin de l'expression rationnelle; et vous pouvez utiliser quel que soit le caractère que vous voulez (les gens utilisent souvent /)
  • Le « $ » à la fin du motif signifie « fin de la chaîne »
  • le () signifie que vous voulez capturer ce qui est entre eux
    • avec preg_match, le tableau donné en tant que troisième paramètre contiendra les données capturées
    • le premier élément de cette matrice sera toute chaîne correspondante
    • et les prochains contiendront chacune des données appariées dans un ensemble de ()
  • les \d signifie "un certain nombre"
  • et le + signifie une ou plusieurs fois

Alors:

  • apparier un ou plusieurs numéro
  • à la fin de la chaîne

Pour plus d'informations, vous pouvez jeter un oeil à PCRE Patterns et Pattern Syntax.

+2

Est-il un avantage particulier à utiliser # autour de votre regex au lieu de /? Juste pour ma propre curiosité? –

+0

Merci, cela fonctionne très bien. – Psyche

+0

Vous n'avez pas besoin du groupement. '$ matches [0]' contient déjà toute la correspondance. – Gumbo

2

Le regex suivant devrait faire l'affaire:

/(\d+)$/ 
+0

S'il vous plaît ajouter une explication en tant que question de bonne modélisation. – mickmackusa

1

EDIT: Cette réponse vérifie si le dernier caractère d'une chaîne est un chiffre ou non. Comme la question https://stackoverflow.com/q/12258656/1331430 a été fermée en tant que copie exacte de celle-ci, je vais poster ma réponse pour cela ici. Pour ce que demande OP de cette question, utilisez la réponse acceptée.


Voici ma solution non-regex pour vérifier si le dernier caractère d'une chaîne est un chiffre:

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

DEMO

substr passant start = -1 retournera le dernier caractère de la string, qui est ensuite vérifié par rapport à ctype_digit qui renverra true si le caractère est un chiffre, ou false sinon.

Références:

  1. substr
  2. ctype_digit
Questions connexes