Voor een webpagina moet ik een stuk code tussen een specifieke div tag vervangen door andere code.
De pagina is extern, dus ik laad hem met file_get_contents. Vervolgens bewerk ik de string met de volgende functie:
Deze functie werkt prima, maar met nested tags niet, zie bijvoorbeeld voorbeeld 1:
resultaat OK:
Voorbeeld 2 met nested div tags werkt niet:
resultaat:
Ik heb het antwoord nog niet kunnen vinden. Hoe moet ik de regex aanpassen zodat de nested tags ook worden verwijdert?
De pagina is extern, dus ik laad hem met file_get_contents. Vervolgens bewerk ik de string met de volgende functie:
PHP:
1
2
3
4
5
6
7
| function strip_selected_tags_by_id_or_class($array_of_id_or_class, $text) { $name = implode('|', $array_of_id_or_class); $regex = '#<(\w+)\s[^>]*(class|id)\s*=\s*[\'"](' . $name . ')[\'"][^>]*>.*</\\1>#isU'; return(preg_replace($regex, '', $text)); } |
Deze functie werkt prima, maar met nested tags niet, zie bijvoorbeeld voorbeeld 1:
HTML:
1
2
3
4
5
| <div id="to_remove"> </div> <div id="retain">Do Not Remove</div> <a class="to_remove">Remove</a><br/> <div class="to_retain">This</div> <input onclick="remove this;"/> |
resultaat OK:
HTML:
1
2
3
| <div id="retain">Do Not Remove</div> <div class="to_retain">This</div> <input onclick="remove this;"/> |
Voorbeeld 2 met nested div tags werkt niet:
HTML:
1
2
3
4
| <div id="to_remove"> <div id="retain">Do Not Remove<div>remove A</div><div>remove B</div></div> <div class="to_retain">This</div> <input onclick="remove this;"/> |
resultaat:
HTML:
1
2
3
| <div>remove B</div></div> <div class="to_retain">This</div> <input onclick="remove this;"/> |
Ik heb het antwoord nog niet kunnen vinden. Hoe moet ik de regex aanpassen zodat de nested tags ook worden verwijdert?