2011-09-20 119 views
0

我有一個'a'標籤的文本。我必須添加一些新的標籤和屬性。正則表達式的鏈接

它看起來像這樣:

'Some test <a href="site">here</a>. Yet <a href="site2">another</a> test.' 

現在我得:

'Some test <noindex><a rel="nofollow" href="site">here</a></noindex>.' 
'Yet <noindex><a rel="nofollow" href="site2">another</a></noindex> test.' 

任何快速的方法來做到這一點用PHP?謝謝。

+0

無法解析[X] HTML與正則表達式。但是你可以用正確的結構化標記替代PHP中的正則表達式。這是一個有效的問題。 –

回答

2

像這樣將覆蓋最真實世界的情況:

$text = 'Some test <a href="site">here</a>. Yet <a href="site2">another</a> test.'; 

$regex = '%(<a\s)(.*?</a>)%i'; 
$replacement = '<noindex>$1rel="nofollow" $2</noindex>'; 

preg_replace($regex, $replacement, $text); 
0
$string = preg_replace('~<a.*?href=(.*?)>(.*?)</a>~msi', '<noindex><a rel="nofollow" href=$1>$2</a></noindex>', $html); 
+0

如果'href'包含' Raynos

1

銘記HTML正則表達式解析是一個壞主意(你應該使用類似DOMDocument代替),這應該做的它:

$str = 'Some test <a href="site">here</a>. Yet <a href="site2">another</a> test.'; 
echo preg_replace('/<a(.+?)<\/a>/', '<noindex><a$1</a></noindex>', $str); 
// Some test <noindex><a href="site">here</a></noindex>. Yet <noindex><a href="site2">another</a></noindex> test. 
1

只是想給DOM文檔(docs)版本,由於傳統觀念認爲「不要對HTM使用正則表達式大號!」。那麼,這是一個很好的說法,但那又怎麼樣?那麼,在這裏你去:

// create a new DOMDocument 
    $doc = new DOMDocument(); 

    // load the string into the DOM 
    $doc->loadHTML('Some test <a href="site">here</a>. Yet <a href="site2">another</a> test.'); 

    // since we are working with HTML fragments here, remove <!DOCTYPE 
    $doc->removeChild($doc->firstChild);    

    // likewise remove <html><body></body></html> 
    $doc->replaceChild($doc->firstChild->firstChild->firstChild, $doc->firstChild); 

    //Loop through each <a> tag in the dom and wrap it with <noindex> 
    foreach($doc->getElementsByTagName('a') as $link) { 
     $parent = $link->parentNode; 
     $ni = $doc->createElement('noindex'); 
     $ni->appendChild($link->cloneNode(true)); 
     $parent->replaceChild($ni, $link); 
    } 

    echo $doc->saveHTML(); 

看看這裏:http://codepad.org/ANi93sBj