用php替换动态链接

时间:2015-03-04 08:56:48

标签: php regex

我想用文本替换文本中的动态链接,如:
如果链接是

<a href="show.php?id=3">Number three</a>
<a href="show.php?id=4">Number four</a>
<a href="show.php?id=1">StackOverflow</a>
<a href="view.php?id=9">Foo</a>

我希望退回

Number three
Number four
StackOverflow
<a href="view.php?id=9">Foo</a>

这将是什么是完美的正则表达式,我尝试了一些正则表达式,但他们只是没有工作。
修改

字符串包含其他链接,例如view.php?id=5,我不想替换它们。

3 个答案:

答案 0 :(得分:2)

这应该有效:

$regex = '~<a href="show.php\?id=\d+">([^<]*)</a>~Ui';
$output = preg_replace($regex, '$1', $input);

答案 1 :(得分:1)

$html = '
    <a href="show.php?id=3">Number three</a>
    <a href="show.php?id=4">Number four</a>
    <a href="show.php?id=1">StackOverflow</a>
    <a href="view.php?id=9">Foo</a>
';

$doc = new DOMDocument();
$doc->loadHTML($html);

foreach ($doc->getElementsByTagName("a") as $a) {
    if (strpos($a->getAttribute("href"), "show.php") === 0) {
        echo $a->nodeValue . "\n";
    } else {
        echo $doc->saveHTML($a) . "\n";
    }
}

将输出:

Number three
Number four
StackOverflow
<a href="view.php?id=9">Foo</a>

答案 2 :(得分:0)

您需要使用基于正面的负面预测。

<a href="(?!view\.php\?id=\d+")[^"]*">([^<>]*)</a>

DEMO

$re = "~<a href=\"(?!view\\.php\\?id=\\d+\")[^\"]*\">([^<>]*)</a>~m";
$str = "<a href=\"show.php?id=3\">Number three</a>\n<a href=\"show.php?id=4\">Number four</a>\n<a href=\"show.php?id=1\">StackOverflow</a>\n<a href=\"view.php?id=9\">Foo</a>";
$subst = "$1";

$result = preg_replace($re, $subst, $str);