2009-07-28 11 views
0

J'ai une situation. Je lis dans une page html en utilisant php en utilisant ce morceau de code $body = file_get_contents('index.htm');Comment faire pour supprimer un morceau de balises HTML dans une page HTML en utilisant PHP

Maintenant dans le fichier index.htm est un morceau de code html comme ci-dessous que j'ai parfois besoin de supprimer/dépend de critères, donc parfois il doit être enlevé et d'autres fois non.

<td><table><tr><td></td></tr></table></td> 

Comment puis-je supprimer toute la section tableau entre les td balises à l'aide PHP.

Répondre

1

Une façon de le faire peut être

$str = '<td><table><tr><td></td></tr></table></td>'; 
preg_match('/(<td>)(<table>.*<\/table>)(<\/td>)/',$str,$matches); 

le tableau résultant

Array 
(
    [0] => <td><table><tr><td></td></tr></table></td> 
    [1] => <td> 
    [2] => <table><tr><td></td></tr></table> 
    [3] => </td> 
) 

peut être utilisé pour recréer le

'<td></td>' 

sans la section de table

+0

Votre solution ne fonctionne pas si le TD a des attributs ou le TABLE. –

+0

Vous avez raison, mais il n'a pas spécifié dans la question qu'il avait des attributs, cependant l'expression rationnelle peut être adaptée à la variable attrs, ou (comme je suppose) le code html qu'il doit enlever est toujours du même type , donc il peut coder les attributs dans l'expression rationnelle. –

2

Si vous avez la chance que votre page soit XML, vous pouvez former un DOM et supprimer le DOM. Sinon, une expression régulière devrait être facile tant que vous n'avez pas imbriqué <table> s (dans ce cas, c'est encore possible mais plus difficile).

+0

Vous pouvez également obtenir l'imbrication si vous utilisez une recherche de récursivité. – eyelidlessness

+0

Er, récursivité * et * lookaround. Bien sûr, ceux-ci ne sont pas strictement "réguliers", ce sont des extensions PCRE. – eyelidlessness

1

Vous peut enlever t il table entre td en utilisant un remplacement d'expression régulière.

$html=preg_replace('/<td([^>]*)><table[^>]*>.*<\/table><\/td>/', '<td$1></td>', $html); 

Cela fonctionne aussi si vous avez des attributs dans votre ou dans votre

Je l'ai essayé moi-même (RegEx Tester) et il fonctionne, espérons que cela fonctionne aussi pour vous.

Questions connexes