2009-04-22 7 views
2

Est-il possible de diviser le contenu du fichier en parties ayant un motif spécifique?Est-il possible de diviser le contenu du fichier en utilisant un motif personnalisé?

C'est ce que je veux atteindre:

  • Lire le fichier en utilisant file_get_contents
  • lecture seule contenu entre les zones similaires commentaires.

Je ne sais pas comment compliqué est cela, mais, fondamentalement, si je l'analyse d'un grand fichier html et que vous souhaitez uniquement afficher dans le navigateur les widgets spécifiques (modèle sont les limites de commentaire) comme ceci:

échantillon :

<html> 
<head> 
    <title>test</title> 
</head> 
<body> 
this content should not be parsed.. ignored 
<!-- widget --> 
this is the widget. i want to parse this content only from the file 
<!-- widget --> 
</body> 
</html> 

serait-il possible d'utiliser php et regex ou quoi que ce soit pour analyser le contenu entre les limites seulement? Je m'excuse mais j'ai essayé d'expliquer ce que je voulais accomplir autant que possible. J'espère que quelqu'un m'aide.

Répondre

6

C'est certainement possible, mais ce n'est pas vraiment nécessaire avec regex. Je serais probablement juste faire quelque chose comme ceci:

$file = file_get_contents('http://example.com/'); 
$widgets = explode('<!-- widget -->', $file); 

Maintenant, les éléments impairs de $widget ([1], [3], [5], etc.) contiennent ce qui était entre ces limites.

+0

Je ne pensais pas vraiment, il est facile! Merci beaucoup vraiment –

1

Vous pouvez réaliser ce que vous voulez avec une expression régulière (ou si vous ne faites que vous séparer, vous pouvez probablement l'utiliser). Vérifiez la documentation. L'autre réponse utilisant explode() fonctionnera probablement aussi.

$text = file_get_contents('/path/to/your/file'); 
$array = split('<!-- widget -->', $text); 

La première entrée sera tout avant la première occurrence de <!-- widget --> et le dernier élément sera tout après la dernière <!-- widget -->. Chaque élément impaire sera ce que vous cherchez.

Php split function documentation

+0

Très très agréable. Question rapide ... y a-t-il une différence pratique entre exploser et scinder? –

+0

Pas vraiment, à part que split() supporte les expressions régulières, mais n'explose pas. Honnêtement, si vous n'allez pas utiliser une expression régulière, vous devriez probablement utiliser explode() car il est probablement plus rapide (cela a à voir avec le noyau php chargeant les choses liées à l'expression régulière pour split mais pas pour exploser). –

+0

Ok merci pour l'explication .. oui je vais essayer d'éviter regex car son faisable avec exploser pas besoin de compliquer les choses. –

1
$pattern = "/<!-- widget -->([\s\S]+)<!-- widget -->/"; 
$match = preg_match_all($pattern,$string,$match_array); 

var_dump($match_array); 
Questions connexes