2010-10-01 5 views
0

Je veux prendre les données saisies dans ce format:Question simple REGEX en PHP

John Smith 
123 Fake Street 
Fake City, 55555 
http://website.com 

et stocker les valeurs des variables comme ceci:

$name = 'John Smith'; 
$address = '123 Fake Street'; 
$city = 'Fake City'; 
$zip = '55555'; 
$website = 'http://website.com'; 

Alors d'abord le nom sera tout ce qui est entré sur la première ligne adresse est ce qui est sur la deuxième ligne ville est tout ce qui est entré sur la troisième ligne avant la virgule seperator zip est tout ce qui est sur la troisième ligne après la virgule et le site Web est w hatever est sur la cinquième ligne

Je ne veux pas que les règles de modèle soient plus strictes que cela. Quelqu'un peut-il s'il vous plaît montrer comment cela peut être fait?

Répondre

3
$data = explode("\n", $input); 

$name = $data[0]; 
$address = $data[1]; 
$website = $data[3]; 

$place = explode(',', $data[2]); 

$city = $place[0]; 
$zip  = $place[1]; 
+2

+1 Propre et lisible – rkg

+0

et si vous avez besoin d'une validation des données (comme le site Web a une syntaxe correcte), alors c'est une bonne utilisation du motif regex sur $ site Web. – burkestar

3

Eh bien, la regex serait probablement quelque chose comme:

([^\r]+)\r([^\r]+)\r([^,]+),\s+?([^\r]+)\r(.+) 

En supposant que \r est votre séparateur nouvelle ligne. Bien sûr, il serait encore plus facile à utiliser quelque chose comme explode() pour diviser les choses aux lignes ...

0

Si vous voulez quelque chose de plus précis, vous pouvez utiliser ceci:

$matches = array(); 

if (preg_match('/(?P<firstName>.*?)\\r(?P<streetAddress>.*?)\\r(?P<city>.*?)\\,\\s?(?P<zipCode>.*?)\\r(?P<website>.*)\\r/s', $subject, $matches)) { 
    var_dump($matches); // will print an array with the parts 
} else { 
    throw new Exception('unable to parse data'); 
} 

acclamations