2011-03-05 4 views
5

Je suis inutile avec des expressions régulières et n'ai pas été en mesure de google moi-même une solution claire à celui-ci.Expression régulière à Rechercher + Remplacer href = "URL"

Je veux rechercher + remplacer du texte ($ content) pour n'importe quelle URL dans le href de l'ancre avec une nouvelle URL (stockée comme la variable $ newurl).

Modifier ceci:

<a href="http://blogurl.com/files/foobar.jpg"><img alt="foobar" src="http://blogurl.com/files/2011/03/foobar_thumb.jpg" /></a> 

à ceci:

<a href="http://newurl.com/here/"><img alt="foobar" src="http://blogurl.com/files/2011/03/foobar_thumb.jpg" /></a> 

J'imagine en utilisant preg_replace serait le mieux pour cela. Quelque chose comme:

preg_replace('Look for href="any-url"', 
'href="$newurl"',$content); 

L'idée est d'obtenir toutes les images sur une page d'accueil WordPress pour créer un lien vers leurs postes au lieu de images pleine taille (ce qui est la façon dont ils par défaut). Habituellement, il n'y aurait qu'une seule URL à remplacer, mais je ne pense pas que cela ferait mal de remplacer tous les matches potentiels.

Espérons que tout cela a du sens et merci d'avance!

Répondre

4

Cela devrait faire l'trick- vous pouvez le tester here

(?<=href=("|'))[^"']+(?=("|')) 

Il utilise lookahead and lookbehind pour affirmer que tout ce qu'il correspond commence par href = » ou href = » et fait en sorte qu'elle se termine Remarque: la regex ne sera pas en mesure de déterminer s'il s'agit d'un document html valide - s'il y a un mélange de guillemets simples et doubles utilisés pour entourer une valeur href, elle ignorera cette valeur. erreur!

+0

points de bonus: Comment puis-je modifier cela pour ne revenir le premier match? – boopboopbeep

6

Voici l'essentiel de ce que j'ai trouvé. Espérons que cela aide quelqu'un:

$content = get_the_content(); 
$pattern = "/(?<=href=(\"|'))[^\"']+(?=(\"|'))/"; 
$newurl = get_permalink(); 
$content = preg_replace($pattern,$newurl,$content); 

echo $content; 

Mucho Thanko à @WiseGuyEh

+1

joli script. mais comment puis-je remplacer les liens dans une grande page HTML un par un, avec des valeurs différentes? – Raptor

Questions connexes