2011-03-05 25 views
5

Düzenli ifadelerle işe yaramaz ve kendime açık bir çözüm bulamamıştır.Düzenli İfade Arama + Değiştirme href = "URL"

Yeni bir URL ile ($ newurl değişkeni olarak depolanan) bağlantı noktasının içindeki herhangi bir URL için bir metin ($ content) aramak istiyorum.

Değişim bu: Buna

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

:

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

Bunun için en iyi olacağını preg_replace kullanarak düşünün. Bir şey gibi:

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

fikri (onlar varsayılan nasıl olan) görevlerine yerine tam boyutlu resimlere bağlantı vermek bir WordPress ön sayfasında tüm resimleri elde etmektir. Genellikle değiştirilecek tek bir url olurdu, ancak tüm potansiyel eşleşmeleri değiştirmek zarar vereceğini düşünmüyorum.

Umut eden tüm bu ve şimdiden teşekkürler!

cevap

4

Bu test edebilirsiniz trick- yapmalıyım o here O eşleştiğini şey href =" veya href ile başlar iddia lookahead and lookbehind kullanır

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

=' ve biter emin olur Tek veya çift tırnak işareti ile

Not: normal bir html belgesi olup olmadığını belirlemek için normal ifadenin geçerli olup olmadığını belirleme - bir href değerini kapatmak için kullanılan çift tırnaklar varsa, bunu dikkate almaz hata!

+0

bonus puan @WiseGuyEh için: Umarım birileri yardımcı olur nasıl ilk maçı döndürmek sadece bu modifiye ki? – boopboopbeep

6

Buraya geldiğim şeyin özü.

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

echo $content; 

Mucho Panelli

+1

güzel komut dosyası. ancak büyük bir HTML sayfasındaki bağlantıları farklı değerlerle tek tek nasıl değiştirebilirim? – Raptor