我想用文本替换文本中的动态链接,如:
如果链接是
<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
,我不想替换它们。
答案 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>
$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);