2010-11-30 2 views
0

Vous cherchez un Regex pour supprimer tout ce qui précède et y compris q = et après et y compris & ct former l'URL suivante.Regex pour le nettoyage de Google Alert URL

http://www.google.com/url?sa=X&q=http://www-possible-spam-link-com/foo-bar-foo-bar-foo-bar-foo-1-ea-from-foo.html&ct=ga&cad=:s7:f1:v0:d2:i2:lt:e0:p0:t1289126539:&cd=bar&usg=foo

+1

pouvez-vous donner un exemple de la sortie que vous attendez – ant

+1

Est-ce exactement la même question qui a été supprimée hier? – Piskvor

Répondre

1
>>> re.match(r'http://.*?q=([^&]*).*?', url).group(1) 
'http://www.foo.com/bar-foo-bar-foo-bar-foo-bar-1-ea-from-foo.html' 

Vous aurez aussi besoin probablement aussi de décoder l'URL dans le cas où il a échappé à une des entités telles que & ou 20%. Ceci est cependant lié à la langue.

En PHP

preg_match('/^http:\\/\\/.*?q=([^&]*)/', $url, $matches); 
print($matches[1]); 
+0

la sortie attendue est http://www.my-sample-domain.com/buy-cheap-inner-traditions-addiction-free-naturally-1-ea-from-herbalremedies.html – user525314

+0

oui, ce sont les mêmes questions comme hier, je ne me suis pas inscrit hier, et maintenant je ne peux pas le trouver ... – user525314

+0

@marcog, merci pour votre réponse, je l'ai testé sur gskinner.com et http: //.*? q = ([^ &] *). *? renvoie http://www.google.com/url?sa=X & q = http: //www.discountproductshop.com/buy-cheap-inner-traditions-addiction-free-naturally-1-ea-from-herbalremedies .html – user525314

1

Marco, ne peut-il utiliser backnames (groupes nommés)?

Vous pouvez spécifier backnames pour les groupes dans le langue standard regex: http://www.regular-expressions.info/named.html

Cette section dit: Fonction

sous() de Python vous permet de référence un groupe nommé \ 1 ou \ g . Cela ne fonctionne pas en PHP. En PHP, pouvez utiliser l'interpolation de chaîne de caractères entre guillemets doubles avec le paramètre $ regs que vous avez passé à pcre_match(): $ regs ['nom'].

Alors ceci est original:

/^http:\/\/.?q=([^ &])/

Cela peut fonctionner:

/^ http : \/\ /.? q = (\ g: [^ &])/

Est-ce que cela a du sens?

+0

Les groupes nommés sont pour référence dans le regex/remplacement. Cela ne va pas aider ici. Le problème auquel fait face l'OP est qu'il a besoin d'une regex qu'il peut passer à preg_match qui correspond à la partie qu'il veut et seulement cela. Ce dont il aurait besoin, c'est quelque chose à faire correspondre - mais pas à la partie^http: \/\ /.? Q =, si cela a du sens? – marcog