2010-06-28 7 views
0

J'essaie d'obtenir l'ID à partir d'une chaîne d'URL.Obtention d'un ID d'une chaîne. Problème Regex

Je suis en train avec le code suivant: -

DE:

<url>http://www.monkeys.com/monkey.php?id=24</url> 

Je veux obtenir '24' avec: -

$ID = preg_replace($url, '/^<url>.*\?id=(.*)<\/url>$/', '\1'); 

Toute aide serait appréciée - Je suis sûr que c'est un problème régulier, mais je trouve déconcertant regex.

Répondre

3

Regex est le mauvais outil pour le travail. Utilisez

  • parse_str - parse la chaîne en variables et
  • parse_url - Parse une URL et retourne ses composants

Exemple:

$url = "http://www.monkeys.com/monkey.php?id=24"; 
parse_str(parse_url($url, PHP_URL_QUERY), $parts); 
var_dump($parts); // 24 

Obtenir l'URL du <URL> e Le lement devrait être trivial. DOM est votre ami. Voir les diverses autres questions portant sur Reading XML with PHP et aussi cet article pourquoi vous should not use Regex for parsing HTML.

+0

Pour une raison quelconque, je ne reçois pas ... il $ url = http: // www.test.com/tester.php?id=212 parse_str ($ url, $ parts); echo $ parts ['id'] = rien. – waxical

+1

Fonctionne maintenant, n'a pas suivi votre exemple correctement. :/Merci – waxical

0

vous pouvez utiliser cette regex:

/^[^?]+\?id=(.*).*$/ 
0

Si ID est numérique seulement:

/\?id=(\d+)/ 

S'il n'y a rien après ID

/\?id=(.*)/ 
+0

Et s'il y a un autre argument après? – Wim

+0

@Wim: ça dépend de la chaîne de OP, ça pourrait être /\?id=(.*?)&?/ – Toto

+0

Oui, '/ \? Id = (. *?) &? /' Serait le plus général Solution. – Wim