-1

私は数時間正規表現をいじっていますが、行き詰まっています。私がこれを持っているとしましょう:

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

そして、PHP preg_replace を使用して faqs リンクを一致させて削除したいので、残っているのは真ん中の連絡先リンクだけです。どうすればいいですか?<a href 一致させる方法と一致させる方法を見つけました /faqs"></a> が、それが3番目のリンクにもあるという事実/faqs"></a>により、2番目のリンクが削除されます。

そして、その3番目のリンクの後にさらに多くのリンクがある可能性があるため、行末などを使用して正規表現がさらに一致するのを止めることはできません。

もう一度言いますが、どうすれば最初のものと最後のものを一致させ、真ん中はそのままにしておくことができますか? また、最後の FAQ の後に別のリンクがあり、それらの後にさらに FAQ のリンクがある可能性があることを覚えておいてください。しかし、よくある質問はすべて削除したいと思います。

余談ですが、よくある質問とヘルプという名前のものをすべて削除したい場合はどうすればよいでしょうか。

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 に答える