2013-05-18 63 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