preg_replace functie om H1 t/m 6 te replacen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java developer met testervaring

Java developer met testervaring Functieomschrijving "De drempel tussen de burger en de Belastingdienst zo laag mogelijk houden: dat is de belangrijke taak van ons team. Dit doen we door het burgerportaal Mijn Belastingdienst continu te verbeteren." René, Java-specialist bij de Belastingdienst. De keten Interactie is een samenwerkingsverband van alle dienstonderdelen binnen de Belastingdienst. Samen zorgen we dat het contact met burgers en bedrijven goed kan plaatsvinden. Onze belangrijkste opgave? Zoveel mogelijk digitaliseren. Dat doen we binnen het onderdeel Informatievoorzieningen (IV), de ICT-organisatie van de Belastingdienst. Denk bij de producten die IV-Interactie ontwikkelt en onderhoudt aan portalen, formulieren en authenticatie- en

Bekijk vacature »

Full Stack Developer Industriële Automatiseri

Raster wordt continu betrokken bij complexe en baanbrekende projecten in industriële automatisering. Ons team is gespecialiseerd in productie automatisering en proces automatisering projecten waarin procesveiligheid een belangrijk aspect is. Ons compact en groeiend OX (Operational Excellence) team ontwikkelt, configureert en levert support op zelfontwikkelde applicaties waarmee onze klanten hun productieprocessen slimmer, sneller, goedkoper en veiliger maken. Operational Excellence wordt zichtbaar gemaakt in resultaten. Bij bedrijven met dezelfde strategie, zal een operationeel excellent bedrijf een lager operationeel risico, lagere operationele kosten hebben en relatief meer winst maken. Het Raster OX team laat haar klanten de resultaten behalen door hun eigen procesdata

Bekijk vacature »

Ceasar Feijen

Ceasar Feijen

15/05/2010 16:20:31
Quote Anchor link
Hai,

Heb hier een functie om alle H1 t/m 6 te vervangen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$row
['korte_content'] = preg_replace('/().*.(<\/h[1-3]>)/i', '', $row['korte_content']);
?>

deze is geplaatst na de while($row = mysql_fetch_assoc($result)) {

Echter is deze functie vreselijk traag (0.6 sec.)
Doe ik dit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$row
['korte_content'] = preg_replace('#(\<(h1|h2|h3)[^\>]*\>.*\</(h1|h2|h3)\>)#isU', "", $row['korte_content']);
?>

dan draait het als een speer (0.24 sec.)

wat is er fout aan de eerste preg_replace ?

Thanks

ps.
Hier nog een functie die goed werkt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? $row['korte_content'] = preg_replace('|<h[1-9][^>]*>.*?</h[1-9][^>]*>|i', '', $row['korte_content']); ?>

Wat zijn de voordelen van de onderste twee voorbeelden ?
 
PHP hulp

PHP hulp

17/10/2021 01:35:20
 

15/05/2010 17:00:30
Quote Anchor link
Die eerste klopt sowieso niet, je hebt een lege capture group, dan mag er alles nul of meerdere keren gematcht worden, nog en iets en dan een h tag. Er schuilt geen logica in die regex, door die dot operator met die greedy match wordt ie waarschijnlijk heel traag. Hij matcht ook verkeerd.
Die tweede is beter, want je hebt daar maar drie mogelijkheden, verder houd je er ook rekening mee dat er dus een id o.i.d. aan de tag toegevoegd kan zijn. Ondanks dat er in sommige cheatsheets staat dat je < en > moet escapen, hoeft dat dus niet. Verder gebruik je de U modifier, die er voor zorgt dat je ungreedy matcht. Deze matcht ook verkeerd.
De derde is hetzelfde als de tweede, alleen zijn de escapes weggehaald, heb je hem ungreedy gemaakt en mag de sluit h tag ook meer inhoud bevatten.

Edit: Ik vind dit de beste regex:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php //Kleurtjes
$subject = '<h1 id="test">test</h1> test <h2>test</h2> test test <h3 id="tesst">blaat<span id="test">test</span></h3>';
$result = preg_replace('%<(h[1-6])[^>]*>([^\1]*)</\1>%', '\2', $subject);

var_dump($result);
[
/code]
Heb hem niet op snelheid getest. Wat wil je berhaupt eigenlijk doen? Kan je misschien niet beter [php]strip_tags[/php] gebruiken?
Gewijzigd op 15/05/2010 17:20:03 door
 
Ceasar Feijen

Ceasar Feijen

15/05/2010 18:01:13
Quote Anchor link
Wat ik wil doen is een overzichts pagina ophalen in een cms
In het block komt dan de titel te staan met daarna 250 woorden met lees meer
Vaak staat in het artikel bovenaan een H1 met dezelfde tekst als de title (voor goede SEO)
In het verkorte block moet dan dus die H1 (2,3 ect.) eruit en uiteraard daarna strip_tags
Heb nu deze
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$row
['korte_content'] = preg_replace('~<(h[1-6])(?=[\s>])[^<>]*>([^<]*(?:<(?!/\1)[^<]*)*)</\1>~' , '', $row['korte_content']);
?>

Voor mij is snelheid in dit cms het belangrijkste :)
Ben bezig met een supersnel cms die toch voldoende functies bevat. Snelheid zover 0.30 seconden per pagina
Gewijzigd op 15/05/2010 18:03:21 door Ceasar Feijen
 

15/05/2010 19:34:46
Quote Anchor link
Caesar:
In het verkorte block moet dan dus die H1 (2,3 ect.) eruit en uiteraard daarna strip_tags

En waarom kan dat dan niet direc in één keer? Als je die strip_tags er toch nog overheen gooit...
 
Ceasar Feijen

Ceasar Feijen

15/05/2010 20:47:59
Quote Anchor link
Je hebt gelijk :)
Alles nu in een functie
Thanks
 

15/05/2010 20:59:44
Quote Anchor link
Ik bedoel, waarom niet in één keer strip_tags er overheen dumpen. Klaar!
Je kunt wel leuk die headers eruit gaan filteren, dat doet strip_tags ook. Waarom moet jij het dan ook nog eens apart doen? Test het anders eens, met alleen strip_tags...
 
Ceasar Feijen

Ceasar Feijen

15/05/2010 21:35:24
Quote Anchor link
Ik denk dat je het niet helemaal begrijpt.
Ik wil niet alleen alle tags eruit hebben maar ook de inhoud van een H1
vb. <h1>Dit moet er ook uit</h1>
 
Joakim Broden

Joakim Broden

15/05/2010 21:46:21
Quote Anchor link
Even tussen door, is er toevallig ook een functie die alle tags er uithaalt op de headings na? Dus h1 h2 h3 etc laten staan en de rest er uit?
 
Ceasar Feijen

Ceasar Feijen

15/05/2010 21:53:10
Quote Anchor link
Misschien wel dus met strip_tags

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$text
= '<h1>Test paragraph.</h1><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <h>
echo strip_tags($text, '<h1><h2><h3>');
?>
Gewijzigd op 15/05/2010 21:54:52 door Ceasar Feijen
 

15/05/2010 22:40:09
Quote Anchor link
Caesar:
Ik denk dat je het niet helemaal begrijpt.
Ik wil niet alleen alle tags eruit hebben maar ook de inhoud van een H1
vb. <h1>Dit moet er ook uit</h1>


Ah, jah, dat was niet geheel duidelijk. Ik geloof niet dat die regex van jou hierboven sneller is dan die van mij, bij die van mij moet je alleen effe die \2 in de replace weghalen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.