2010-10-24 5 views
1

Je suis en train d'écrire une expression régulière en php que dans une ligne commeaide PHP Regex, faire partie d'un lien

<a href="mypage.php?(some junk)&p=12345&(other junk)" other link stuff>Text</a> 

et il ne me revenir « p = 12345 », ou même « 12345 ". Notez que le (certains junk) & et le & (otherjunk) peuvent ou peuvent ne pas être présents. Puis-je le faire avec une expression, ou en aurai-je besoin de plus d'un? Je n'arrive pas à comprendre comment le faire en un seul, ce qui est ce que je voudrais si possible. Je suis également ouvert à d'autres méthodes pour le faire, si vous avez une suggestion.

Merci

Répondre

1

Utilisez parse_url et parse_str:

$url = 'mypage.php?(some junk)&p=12345&(other junk)'; 
$parsed_url = parse_url($url); 
parse_str($parsed_url['query'], $parsed_str); 
echo $parsed_str['p']; 
+0

Le problème que je vais avoir avec ceci est que certains liens (ordure) et ne peuvent pas être là, entraînant un lien comme: mypage.php p = 12345 & (autre indésirable), où cela ne semble pas fonctionner. Un moyen de remédier à cela? – Samsquanch

+0

@ user48518, j'ai mis à jour ma réponse pour utiliser 'parse_str'. –

+0

J'étais réellement incapable de faire fonctionner ceci jusqu'à ce que j'ai changé $ parsed_str = parse_str ($ parsed_url ['query']); à parse_str ($ parsed_url ['query'], $ parsed_str) ;, mais merci pour votre réponse, c'était exactement ce que je cherchais. – Samsquanch

2

Peut-être une meilleure tactique sur l'utilisation d'une expressoin régulière dans ce cas est d'utiliser parse_url.

Vous pouvez l'utiliser pour obtenir la requête (ce qui vient après le? Dans votre URL) et diviser sur le caractère '&', puis le '=' pour mettre les choses dans un dictionnaire sympa.