2012-06-29 4 views
2

Disons que je veux extraire une liste des sections d'un e-mail qui sont répertoriés dans le formatComment un REGEX peut-il extraire un motif à plusieurs reprises?

Section 26, 753, 87, 201, 47

Je sais que ce certain type de mise en forme est présente dans mon document, mais je ne sais pas où. Comment puis-je écrire une regex qui va extraire tous les numéros de section? (Désolé, je vais poster le modèle que j'ai déjà plus tard.) Actuellement, il cherche la phrase de section, suivie d'un espace, suivi d'un nombre. Comment le reste est-il extrait? Peut-être 0 ou plusieurs répétitions de virgule, espace, nombre? Comment exactement est-ce formaté?

Répondre

2

Le renvoi direct d'un nombre variable de captures à partir d'une expression régulière n'est pas possible avec PHP/PCRE (bien qu'il existe des implémentations qui prennent en charge cela, notamment .NET et Perl 6).

Avec PHP, vous devez écrire du code. Il existe une variété d'options - supprimer les correspondances de la chaîne dans une boucle, extraire la liste, puis utiliser preg_match_all pour obtenir les nombres, et ainsi de suite - mais je pense que je voudrais simplement extraire toute la liste dans sa propre chaîne et utiliser split (bien, preg_split) pour obtenir les numéros de section individuels:

$str = 'Section 26, 753, 87, 201, 47'; 
if (preg_match('/Section\s+(\d+(?:,\s*\d+)*)/', $str, $match)) { 
    $sections = preg_split('/,\s*/', $match[1]); 
} 

print_r($sections); 

ce qui donne le résultat souhaité:

Array (
    [0] => 26 
    [1] => 753 
    [2] => 87 
    [3] => 201 
    [4] => 47 
) 
+0

Hmm, PHP est sans doute pas la langue que je veux utiliser pour ce projet-là. J'ai posté cette question juste avant que je trouve une méthode différente pour extraire des données de mon document semi-structuré, et récupérer un nombre variable de captures à partir de grandes sections d'un très grand document est exactement ce dont j'ai besoin. Savez-vous que Python supporte cette fonctionnalité? Connaissez-vous des références qui pourraient répertorier des langues qui le font? –

Questions connexes