2010-12-16 174 views
1

Je dois obtenir d'une adresse complète les derniers mots qu'elle contient, après le code postal (qui doit toujours être dans le même ordre).PHP PCRE - Obtenir la ville de l'adresse

Un exemple d'une adresse:

Av. Elias Garcia (em frente ao Restaurante Pote) Palhais 2815-233 Charneca da Caparica 

J'ai besoin de cette partie:

Charneca da Caparica 

Wich, comme vous pouvez le voir, est le dernier mot après le code postal:

2815-233 

J'ai besoin d'une expression PCRE pour faire correspondre cela. Aucune suggestion?

+1

est le code postal toujours "4 chiffres - 3 chiffres", uniquement des chiffres format? – deceze

+0

Affirmatif @deceze. Maintenant que vous avez demandé, ce format est pour le Portugal. J'espère que cela aidera quelqu'un dans le futur. – yoda

Répondre

3

Quelque chose comme ceci devrait être capable de le faire.

preg_match('/\d{4}-\d{3}\s+(.*)/', $subject, $match); 
echo $match[1]; 

PS: Je ne voudrais pas essayer d'analyser cela en utilisant reg exp, car il ne sera pas efficace, si l'utilisateur a mis la ville avant le code postal. Si vous êtes sûr à 100% de vos données, ça devrait aller.

+0

@RageZ, bonne mise à jour. Votre expression originale était à l'envers. +1 sur le PS. C'est une regex très spécifique. –

+0

Merde j'étais proche. Je n'ai pas de contrôle sur l'entrée de l'utilisateur, c'est pour un robot d'indexation Web, mais je fais confiance (trop naïf?) Que l'application d'origine contrôle cette partie pour moi. Au fait, il vous manque la dernière barre à la fin de l'expression. À votre santé! – yoda

+0

Je pense que vous un mot et un délimiteur là. ;) – deceze

2

Ceci obtiendra la dernière partie de la chaîne après le code postal (4 chiffres, tiret, 3 chiffres) et les espaces.

preg_match('/\s+\d{4}-\d{3}\s+(.+)$/', $address, $match); 
print_r($match); 
+0

travaillé aussi, merci :) – yoda