用有效ID替换URL

neo*_*art 3 php regex

我有一个包含大量链接的PHP String $菜单.我需要用基于链接的ID替换href.

我需要

  • 删除域名
  • 在开头和结尾删除斜线
  • 用' - '代替中间的斜线

这就是我所拥有的:

<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>
Run Code Online (Sandbox Code Playgroud)

这就是我想要的:

<a href="#start">Link</a> 
<a href="#contact">Another Link</a>
<a href="#contact-sub">Another Link</a>
Run Code Online (Sandbox Code Playgroud)

我用preg_replace试了一下

$search = array(
    "/http:\/\/www.test.de/",
    "/".preg_quote('/">', '/')."/"
);
$replacement = array('#','">');
$menu = preg_replace($search,$replacement,$menu);
Run Code Online (Sandbox Code Playgroud)

我的解决方案看起来有点"脏,并没有取代中间的斜线.任何想法"真正的"模式来完成这个?

Ja͢*_*͢ck 6

这可以通过DOM解析轻松完成:

$html = <<<EOM
<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>
EOM;

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

foreach ($dom->getElementsByTagName('a') as $anchor) {
    $href = $anchor->getAttribute('href');
    if (strpos($href, 'http://www.test.de/') === 0) {
        $href = '#' . strtr(trim(parse_url($href, PHP_URL_PATH), '/'), '/', '-');
        $anchor->setAttribute('href', $href);
    }
}

echo $dom->saveHTML();
Run Code Online (Sandbox Code Playgroud)

演示