verkrijg_string_tussen()

Door Eddy E, 14 jaar geleden, 1.763x bekeken

Deze functie maakt het makkelijk mogelijk om een bepaalde tekst ergens tussenuit te halen.
Zie voorbeelden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
verkrijg_string_tussen("Tekst welke <b>vet</b> is gemaakt.", "<b>", "</b>"); // geeft "vet"
verkrijg_string_tussen("De naam is: Sinterklaas.", ":", "."); // geeft "Sinterklaas"


Altijd 3 parameters opgeven: de te doorzoeken tekst en de begin en eind-'tag'. Het werkt met tags, maar ook anders (zie Sinterklaas).
Kan handig zijn als je iets aan het strippen bent. Uiteraard kan dit ook met ereggen, maar daarom is dit ook een snippet ;).

Gesponsorde koppelingen

PHP script bestanden

  1. verkrijgstringtussen

 

Er zijn 11 reacties op 'Verkrijgstringtussen'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


14 jaar geleden
 
0 +1 -0 -1
Dit loop fout op het moment dat het eerste resultaat begint op de eerste positie. Deze regel:
if ($positie_begin == 0)
moet worden
if ($positie_begin === false)
Eddy E
Eddy E
14 jaar geleden
 
0 +1 -0 -1
Dat is inderdaad beter: code is gewijzigd.
Ik heb er nog nooit last van/mee gehad maar het klopt dan inderdaad beter.
De eerste positie is echter wel altijd een spatie, omdat ik die aan het begin nog even toevoeg.
Douwe
Douwe
14 jaar geleden
 
0 +1 -0 -1
Ik weet niet hoor, maar dit lijkt me iets sneller (iig korter): (Not tested)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
function verkrijg_string_tussen($sTekst, $sBegin, $sEinde)
{

    preg_match("/".preg_quote($sBegin, "/")."(?<string>.*)".preg_quote($sEinde, "/")."/", $sTekst, $aMatches);
    
    return $aMatches['string']
}

?>
Martijn B
Martijn B
14 jaar geleden
 
0 +1 -0 -1
@Douwe M:

Ik denk niet dat het sneller is, wel korter.
Michael
michael
14 jaar geleden
 
0 +1 -0 -1
volgens mij is preg_match net zo snel. (die doet tenslotte op de achtergrond vast wel bijna hetzelfde)
Iltar van der berg
iltar van der berg
14 jaar geleden
 
0 +1 -0 -1
regular expressions zijn altijd trager maar veel krachtiger
Joren de Wit
Joren de Wit
14 jaar geleden
 
0 +1 -0 -1
De tweede $string van regel 10 moet $tekst zijn, anders krijg je een notice. Verder houdt deze functie geen rekening met geneste tags:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo verkrijg_string_tussen('Een tekst met <b> dubbele <b> </b> tag </b>', '<b>', '</b>');
?>

Zal niet het gewenste resultaat ' dubbele <b> </b> tag ' maar enkel het gedeelte tot de eerste </b>. Met een reguliere expressie ben je hier veel flexibeler in...
PHP erik
PHP erik
14 jaar geleden
 
0 +1 -0 -1
Leuke toevoeging, ook zeker goed dat er moeite wordt gedaan, maar toch zie ik niet echt voordelen t.o.v. regular expressions. Dit soort dingen zijn namelijk behoorlijk bug-gevoelig en ook niet vaak praktisch toepasbaar volgens mij. Begrijp me niet verkeerd, mijn bedoeling is niet om het direct af te kraken zoals bij veel scripts gebeurt. In dit geval vind ik dit script alleen een beetje 'gevaarlijk'.

Edit: in het script van Jonathan is in ieder geval te zien dat het script wèl in de praktijk toepasbaar is ;-) Dus dat neem ik terug.
Mark L
Mark L
14 jaar geleden
 
0 +1 -0 -1
Ik had het pas ook nodig en ik heb preg_split gebruikt. Dit hieronder is een niet geteste code.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$array
= preg_split("#((.*?)+\[|\]#", '$_POST[cool]', -1,  PREG_SPLIT_NO_EMPTY);
?>


Maar het is wel een leuke manier om het anders te doen
Richard van Velzen
Richard van Velzen
14 jaar geleden
 
0 +1 -0 -1
@Iltar: regexes zijn misschien trager dan 1 string-operatie, maar het stukje dat Douwe M postte zal zeker sneller zijn dan de originele functie. Vergeet niet dat PCRE geoptimaliseerd is voor dat soort dingen. Ik zou alleen het named subpatroon een gewone laten, dat scheelt weer een array entry. :)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Toby hinloopen
toby hinloopen
14 jaar geleden
 
0 +1 -0 -1
Je voorbeeld klopt niet eens!

verkrijg_string_tussen("De naam is: Sinterklaas.", ":", "."); // geeft "Sinterklaas"

Er zit namelijk een SPATIE dussen : en 'sinterklaas'

Je krijgt dus ' Sinterklaas', met spatie.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. verkrijgstringtussen

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.