【发布时间】:2013-04-17 13:26:45
【问题描述】:
我有一个带有很多链接的 PHP 字符串 $menu。我需要将 href 替换为基于链接的 ID。
我需要
- 删除域
- 删除开头和结尾的斜线
- 将中间的斜杠替换为“-”
这就是我所拥有的:
<a href="http://www.test.de/start/">Link</a>
<a href="http://www.test.de/contact/">Another Link</a>
<a href="http://www.test.de/contact/sub/">Sub Link</a>
这就是我想要的:
<a href="#start">Link</a>
<a href="#contact">Another Link</a>
<a href="#contact-sub">Another Link</a>
我用 preg_replace 试过了
$search = array(
"/http:\/\/www.test.de/",
"/".preg_quote('/">', '/')."/"
);
$replacement = array('#','">');
$menu = preg_replace($search,$replacement,$menu);
我的解决方案看起来有点“脏”,并且没有替换中间的斜线。有什么想法可以用“真实”的模式来完成吗?
【问题讨论】:
-
域总是一样的吗?
-
为了方便起见,您可以使用
preg_replace_callback并广泛匹配<A ...>标签。然后用多个str_replace()重写它们的内部结构。这很快,并且会起作用,但只适用于简单的场景,所有链接都以这种方式制作。如果您开始使用更复杂的标签,可能使用引入 空格 和 转义引号 的内联样式或 Javascript,则正则表达式将不起作用,而 Jack 的解决方案是您唯一可行的办法。