-1

我已经用 Regex 搞砸了几个小时,但我陷入了僵局。可以说我有这个:

<a href="/link here/faqs"></a><a href="/link/here/contacts"></a><a href="/link here/faqs">

我想使用 PHP preg_replace 来匹配和删除常见问题链接,所以剩下的就是中间的联系人链接。我该怎么做?我发现了如何使它匹配 <a href 并且也匹配/faqs"></a> ,但事实上它/faqs"></a>也在第三个链接中,然后它删除了第二个链接。

在第三个链接之后可能还有更多,所以我不能使用行尾或任何东西来阻止正则表达式匹配更多。

所以再一次,我如何让它匹配第一个并匹配最后一个,但保持中间位置?请记住,在最后一个常见问题解答之后可能还有其他链接,并且在它们之后可能有更多常见问题解答链接。但我想删除所有常见问题解答。

作为旁注,如果我想删除所有常见问题解答以及所有名为帮助的问题,它将如何工作。

4

1 回答 1

2

在这里使用 XML 解析器可能有点过头了:

$html = '<a href="/link here/faqs"></a><a href="/link/here/contacts"></a><a href="/link here/faqs">';
$dom = new DomDocument();
$dom->loadHtml($html);

$xpath = new DomXPath($dom);
$links = $xpath->evaluate('//a');

$newHtml = '';

// rebuild html, and leave out any links that contain "faq"
// in the href attribute
foreach($links as $link)
  if(strpos($link->getAttribute('href'), 'faq') === false)
    $newHtml .= $dom->saveXml($link);

print $newHtml;
于 2013-01-21T04:15:03.287 回答