我有一个带有大量链接的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 的解决方案是您唯一实际的选择。 - LSerni