Avatar billede fixxxer Nybegynder
30. november 2005 - 17:52 Der er 13 kommentarer og
1 løsning

finde html-elementer

Jeg prøver noget i retningen af:

    $file_contents        = preg_replace('/<(\/?(h1|h2|h3|h4|p|td|div|html|head|meta)[^>]*?)>/i',
                                                                    '<span class="html_key">$0</span>"',
                                                                    $file_contents);


Det jeg gerne ville opnå var at de opstillede html-nøgler (hmtl, head, meta, etc.) fik smidt en span rundt om der giver den en style, og ikke deres lesser-than og greater-than tegn, samt det indhold der nu måtte stå inde i hele tagget.

Hvordan klarer man lige den?
Avatar billede roenving Novice
01. december 2005 - 12:09 #1
Sæt <> ind !-)

preg_replace('/<(\/?(h1|h2|h3|h4|p|td|div|html|head|meta)[^>]*?)>/i', '<span class="html_key">$0</span>"', $file_contents);
Avatar billede fixxxer Nybegynder
01. december 2005 - 15:45 #2
Den virker som sådan fint nok, den sætter bare <span>'en rundt om for meget. Der er tale om htmlentities'ed HTML:

    $file_name                = 'test.php';
   
    $file_handler            = fopen($file_name, 'r');
    $file_contents        = fread($file_handler,
                                                        filesize($file_name));
                                            fclose($file_handler);
                                           
    $file_contents        = htmlentities($file_contents);
    $file_contents        = str_replace("\t", "&nbsp;&nbsp", $file_contents);
    $file_contents        = str_replace("\n", "<br />", $file_contents);
   
    $file_contents        = preg_replace('/&lt;(\/?(h1|h2|h3|h4|p|td|div|html|head|meta)[^>]*?)&gt;/i',
                                                                    '<span class="html_key">$0</span>"',
                                                                    $file_contents);
   
    return $file_contents;
Avatar billede fixxxer Nybegynder
01. december 2005 - 15:48 #3
Den spytter det her ud:

http://jbweb.dk/show_source.php

Jeg ville bare gerne kun have span'en rundt om head, html, meta etc. og ikke hele <html xmlns="http://www.w3.org/1999/xhtml"> tagget fx.
Avatar billede roenving Novice
01. december 2005 - 15:48 #4
Argh, du skal også bruge $1, for i de sprog, der understøtter variabel 0, er det hele den matchede streng !-)
Avatar billede fixxxer Nybegynder
01. december 2005 - 15:54 #5
Mede $1 får jeg nogenlunde samme resultat, bare uden < og >
Avatar billede roenving Novice
01. december 2005 - 15:58 #6
Vil du kun have selve tag-navnet ?-)

-- så skal du nok fjerne de yderste paranteser !-)

preg_replace('/&lt;\/?(h1|h2|h3|h4|p|td|div|html|head|meta)[^>]*?&gt;/i',
Avatar billede fixxxer Nybegynder
01. december 2005 - 16:00 #7
Ja det hjælper med, men den må ikke fjerne taggets parameteres:

    $file_name                = 'test.php';
   
    $file_handler            = fopen($file_name, 'r');
    $file_contents        = fread($file_handler,
                                                        filesize($file_name));
                                            fclose($file_handler);
                                           
    $file_contents        = htmlentities($file_contents);
    $file_contents        = str_replace("\t", "&nbsp;&nbsp", $file_contents);
    $file_contents        = str_replace("\n", "<br />", $file_contents);
   
    $file_contents        = preg_replace('/&lt;\/?(h1|h2|h3|h4|p|td|div|html|head|meta)[^>]*?&gt;/i',
                                                                    '&lt;<span class="html_key">$1</span>&gt;',
                                                                    $file_contents);
   
    return $file_contents;
Avatar billede roenving Novice
01. december 2005 - 16:01 #8
Så:

    $file_contents        = preg_replace('/&lt;\/?(h1|h2|h3|h4|p|td|div|html|head|meta)([^>]*?)&gt;/i',
                                                                    '&lt;<span class="html_key">$1</span>$2&gt;',
                                                                    $file_contents);
Avatar billede fixxxer Nybegynder
01. december 2005 - 16:05 #9
Ah det er jo perfekt! Kan du en smart ting så lukkede tags, fx </title> ikke bliver byttet ud med <title> ?
Avatar billede roenving Novice
01. december 2005 - 16:10 #10
Tjah, du kan lave en ny gruppe med det tegn alene eller inkludere det i matchet:

preg_replace('/&lt;(\/?)(h1|h2|h3|h4|p|td|div|html|head|meta)([^>]*?)&gt;/i',
                                                                    '&lt;<span class="html_key">$1$2</span>$3&gt;',
                                                                    $file_contents);

eller:

preg_replace('/&lt;(\/?(h1|h2|h3|h4|p|td|div|html|head|meta))([^>]*?)&gt;/i',
                                                                    '&lt;<span class="html_key">$1</span>$3&gt;',
                                                                    $file_contents);

-- den sidste konstruktion har jeg aldrig selv testet !-)
Avatar billede fixxxer Nybegynder
01. december 2005 - 16:14 #11
Jeg brugte dit første bud.. Det virker fortræffeligt!

Mere kan jeg ikke bede om - bortset fra et svar :)
Avatar billede roenving Novice
01. december 2005 - 16:16 #12
Velbekomme '-)
Avatar billede fixxxer Nybegynder
01. december 2005 - 16:19 #13
Mange tak for din hjælp - nu begynde det også hjælpe på min reg expr. forståen :)
Avatar billede roenving Novice
01. december 2005 - 16:25 #14
-- og jeg takker for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester