2010-10-25 11 views
0

J'ai besoin de remplacer certaines URL entrées par l'utilisateur avec des objets flash intégrés ... et j'ai des problèmes avec une regex que j'utilise pour correspondre à l'url ... Je pense principalement parce que les URL sont SEO-friendly et donc un peu plus difficile pour analyserRegex dans preg_replace pour détecter le format url et extraire les éléments

URL structure: http://www.site.com/item/item_title_that_can_include_1('_etc-32CHARACTERALPHANUMERICGUID 

je dois à la fois détecter un match d'une URL dans ce format et de capturer l'32CHARACTERALPHANUMERICGUID qui est toujours placé après le - dans l'url

quelque chose comme:

$ret = preg_replace('#http://www\.site\.com/item/([^-])-([a-zA-Z0-9]+)#','<embed>itemid=$2</embed>', $ret); 

Pour une raison quelconque, ce qui précède ne trouve pas de correspondance pour une URL dans le format spécifié. Je suis nouveau dans les expressions régulières, donc je pense qu'il me manque quelque chose d'assez évident.

Répondre

2

Vous devriez vérifier parse_url().

Examiner les résultats - il a été créé pour analyser les URL. Vous serez en mesure d'extraire les données dont vous avez besoin des jetons retournés.

Si vous êtes regex fou, essayez ceci ...

/^http:\/\/www\.site\.com\/item\/[^-]*\-([a-zA-Z0-9]{32})$/ 

Votre exemple est presque là, mais ...

  • Lorsque vous faites le pas plage de caractères, c.-à-[^-] , vous avez toujours besoin d'un quantificateur. J'ai placé *, ou 0 ou plus.
  • Vous ne semblez pas utiliser le titre d'article , donc nous ne prendrons pas la peine de le capturer.
  • Vous devez utiliser les ancres de début (^) et de fin ($) si la chaîne est toujours exactement comme cela.
  • Vous dites que le GUID est de 32 caractères, donc nous pouvons aussi bien l'indiquer explicitement avec le quantificateur {32}.
+0

alex, vous êtes l'homme. Cela a fonctionné parfaitement. Merci beaucoup pour votre aide. – byron