PHP正则表达式 - 查找和替换链接

时间:2013-05-18 15:59:44

标签: php regex replace html-parsing

我正在尝试进行此正则表达式匹配并替换但无法执行此操作。

实施例

<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>

与标签的其余部分相同。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用此:

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

答案 2 :(得分:0)

如果你想要一个正则表达式,试试这个:

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

我不建议使用正则表达式来执行此操作。