2010-08-31 7 views
0

Possible en double:
PHP: Strip a specific tag from HTML string?expression régulière pour supprimer li en php

Salut à tous,

Je veux supprimer li d'une chaîne. J'utilise l'expression régulière suivante, mais cela ne fonctionne pas. Quel peut être le problème ?

$str = '<div id="navigation" ><div class="menuwrap"><ul><li><a href="#">Home 
</a></li><li class="select"><a href="#">About Us</a></li><li><a href="#">Services 
</a></li><li><a href="#">Clients</a></li><li><a href="#">Contact Us</a></li></ul> 
</div><div class="submenu"><ul><li><a href="#">Submenu1</a></li><li><a 
href="#">Submenu2</a></li><li><a href="#">Submenu3</a></li> 
<li><a href="#">Submenu4</a> 
</li></ul></div></div>'; 

$replacelink = 'Contact Us'; 

echo $str = preg_replace('/<li(.*?)>\s*\b<a(.*?)>\s*\b'.$replacelink.'\b\s*<\/a> 
\b\s*<\/li>/i', '', $str); 

Répondre

0

Cela devrait fonctionner:

echo preg_replace('/<li><a[^>]*>'.$replacelink.'<\/a><\/li>/s', '', $str); 

Mais s'il vous plaît rappelez-vous, il existe des outils pour manipulate DOM et ce n'est pas regexp :)

0

Retirez les limites de mots (\b) de votre expression régulière. Pour le moment, vous recherchez une quantité d'espace suivie d'une limite de mot suivie de <. Il n'y aura jamais de limite de mot entre les espaces et <.

Using the solution dans le double, vous devriez être en mesure de le faire sans l'aide du sélecteur regex :contains() XPath:

$dom = new DOMDocument; 
$dom->loadHTML($str); 
$xPath = new DOMXPath($dom); 
$nodes = $xPath->query('//a:contains('.$replacelink.')'); 
if($nodes->item(0)) { 
    $li = $nodes->item(0)->parentNode; 
    $li->parentNode->removeChild($li); 
} 
$str = $dom->saveHTML(); 
Questions connexes