2013-05-18 112 views
0

我想要做這個正則表達式匹配並替換,但不能做到這一點。PHP的正則表達式 - 查找和替換鏈接

<a href=one target=home>One</a> 
<a href=two>Two</a> 
<a href=three target=head>Three</a> 
<a href=four>Four</a> 
<a href=five target=foot>Five</a> 

我想找到每組一個標籤,並用這樣的

替換查找

<a href=one target=home>One</a> 

更改爲

<a href='one'>One</a> 

相同WA y標籤的其餘部分。

任何幫助將不勝感激!

+0

我是新的正則表達式,我不知道如何找到匹配將引號添加到href。 – SchizoBoy

+1

**不要使用正則表達式來解析HTML **。你不能用正則表達式可靠地解析HTML,你將面臨悲傷和挫折。只要HTML從你的期望改變,你的代碼就會被破壞。有關如何使用已經編寫,測試和調試的PHP模塊正確解析HTML的示例,請參閱http://htmlparsing.com/php。 –

回答

1

使用此:

preg_replace('/<a(.*)href=(")?([a-zA-Z]+)"? ?(.*)>(.*)<\/a>/', '<a href='$3'>$5</a>', '{{your data}}'); 
+0

工程!謝謝mightyuhu! – SchizoBoy

5

使用DomDocument()將是使用HTML更簡單的方法。

<?php 
    $str = '<a href=one target=home>One</a> 
<a href=two>Two</a> 
<a href=three target=head>Three</a> 
<a href=four>Four</a> 
<a href=five target=foot>Five</a>'; 
    $dom = new DomDocument(); 
    $dom->loadHTML($str); 
    $anchors = $dom->getElementsByTagName('a'); 
    foreach ($anchors as $a) 
    { 
     if ($a->hasAttribute('target')) 
     { 
      $a->removeAttribute('target'); 
     } 
    } 
    $str = $dom->saveHTML(); 

See it in action

+0

謝謝,但這不會將引號添加到href。 – SchizoBoy

+0

你確定嗎?我在我的小提琴中看到引號。但隨意添加' $ dom-> formatOutput = true;'只是爲了最後一行,看看是否有幫助。 –

+0

對不起,你是對的!謝謝約翰。 – SchizoBoy

0

如果你想有一個正則表達式,試試這個:

$str = preg_replace('/<a [^>]*href=([^\'" ]+) ?[^>]*>/',"<a href='\1'>",$str); 

我不建議使用正則表達式來做到這一點雖然。

+0

謝謝你的回答! – SchizoBoy