2010-05-10 7 views
2

J'ai une liste d'URL, qui peuvent être dans n'importe quel format. Une par ligne, séparés par des virgules, ont du texte au hasard entre eux, etc., les URL sont tous de 2 sites différents et ont une structure similaireComment extraire des informations d'un bloc d'URL en php?

Pour cet exemple, permet de dire qu'il ressemble à ce

Random Text - http://www.domain2.com/variable-value 
Random Text 2 - http://www.domain1.com/variable-value, http://www.domain1.com/variable-value, http://www.domain1.com/variable-value 

http://www.domain1.com/variable-value 
http://www.domain2.com/variable-value 
http://www.domain1.com/variable-value http://www.domain2.com/variable-value http://www.domain1.com/variable-value 

Je dois extraire 2 informations. Vérifiez si son domaine1 ou domain2 et la valeur qui suit "variable-"

Il devrait donc créer un tableau multidimensionnel, ce qui aurait 2 éléments: domaine + valeur.

Quelle est la meilleure façon de procéder?

+0

Est-ce que _value_ toujours numérique ou alphanumérique? –

+2

y a-t-il des limitations sur ce que la valeur des caractères peut contenir? Il peut être difficile de trouver la fin de la valeur – Galen

+0

ses seules lettres et chiffres. La valeur de fin serait n'importe quel caractère qui n'est pas une lettre ou un nombre, il pourrait également être un saut de ligne – Jack

Répondre

1

Ceci est une possibilité d'extraction des URL. Le seul problème est que les URL elles-mêmes ne contiennent pas de virgule. Donc, si est assez ....

$lines = explode('\n', $urls); 

for($i = 0; $i < sizeof($lines); $i++) 
{ 
    if(preg_match_all("http:\\/\\/[^,]*variable-([^,]+)", $lines[$i], $matches)) 
    { 

    } 
} 

Soit dit en passant ... les matches sont stockés dans le tableau $matches.

P.S: Édité ... j'ai oublié d'échapper la barre oblique inverse et vous devriez rechercher la ligne pour la chaîne afin d'assurer un comportement correct ... tester l'expression rationnelle à http://www.regex-tester.de/regex.html ... cela a juste fonctionné avec mon regex. Après d'autres recherches, j'ai trouvé cette page: http://internet.ls-la.net/folklore/url-regexpr.html. Il contient l'expression régulière pour une URL. Vous pouvez l'utiliser pour extraire les URL en premier et dans la deuxième étape, vous pouvez parcourir vos URL et extraire les informations variables recherchant par exemple. variable-([\W]+).

+0

Cela ne correspond à rien :( – Jack

+0

problème est, il ne sera pas toujours 1 lien par ligne. – Jack

0

preg_split, preg_match, parse_url

// split urls 
$urls = preg_split('!,\s+!', 'http://www.domain1.com/variable-value, http://www.domain2.com/variable-value, http://www.domain3.com/variable-value'); 

// check for domain and path variable 
foreach ($urls as $url) { 

    $parts = parse_url($url); 
    // check domain: $parts['host']; 
    $matches = array(); 
    // check path: preg_match('!^/variable-([^/]+)!', $parts['path'], $matches) 
} 
0
$text = "http://www.domain1.com/variable-value1, http://www.domain2.com/variable-value2 http://www.domain1.com/variable-value3"; 
preg_match_all("/http:\\/\\/(.+?)\\/variable-([a-z0-9]+)/si", $text, $matches); 
print_r($matches); 

Résultat:

Array 
(
    [0] => Array 
     (
      [0] => http://www.domain1.com/variable-value1 
      [1] => http://www.domain2.com/variable-value2 
      [2] => http://www.domain1.com/variable-value3 
     ) 

    [1] => Array 
     (
      [0] => www.domain1.com 
      [1] => www.domain2.com 
      [2] => www.domain1.com 
     ) 

    [2] => Array 
     (
      [0] => value1 
      [1] => value2 
      [2] => value3 
     ) 

) 
Questions connexes