[PHP] string afkappen na .

Pagina: 1
Acties:

  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
Keej..

Ik heb UTFS gedaan ;) en ik kwam er nog niet uit :)
Wat ik nu heb is dit:
code:
1
2
3
4
5
6
7
8
if ($dir = opendir(files)) {
  while (($file = readdir($dir)) !== false) {
    if($file=='.'||$file=='..')
    continue;

    echo "$file\n";
  }  
  closedir($dir);

Hier wil ik dus autmagisch linkjes laten verschijnen van alle bestanden in de map "files" Dus ik wil niet aap.html laten wijzen naar aap.html, maar aap naar aap.html :) Dus bij $file moet alles (inclusief .) ná de laatste . eraf :)

any id's?

Gekkie is a proud member of TheBenny!


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Misschien es kijken naar strtok. Daarmee kun je strings "doormidden hakken" op basis van karakters. :)

  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
maar kom ik nu niet in de problemen als ik meerdere "." in mn bestanden heb staan!?

ik filter de . en .. er al uit.. maar de bestanden daarna (bv. ik.heb.een.appel.html ) zou er dus alleen als ik uitkomen? toch?

Gekkie is a proud member of TheBenny!


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Een typisch geval van creativiteit gecombineerd met de PHP manual, maar vooruit, ik hou 't op:

ereg_replace("\.[^\.]*$","",$bestandsnaam)

Verwijderd

$file = substr($file,0,strrpos($file,"."));
of
$file = ereg_replace("\.[a-zA-z09]+$","",$file);

(nietgetest, maar ongeveer goed)

  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
hmmmmz... blijkt maar weer dat ik nOOb ben :S
damn.. die ereg_replace's kom ik nooit uit ;(

Gekkie is a proud member of TheBenny!


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Op woensdag 23 januari 2002 21:21 schreef _Gekkie_ het volgende:
damn.. die ereg_replace's kom ik nooit uit ;(
Dat denk je maar. Die dingen zien er gewoon veel ingewikkelder uit dan ze zijn. Als je de manual even doorneemt en ze zelf probeert te maken, blijkt 't allemaal redelijk logisch en eenvoudig te zijn. Gewoon mee oefenen, dan leer je 't snel genoeg.

Verwijderd

En er staat een goeie regex-turtorial op PHP Freakz!
Voor de volledigheid.. en makkelijkheid hier! :)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

btw. vergeet niet dat regexp-en 'duur' zijn in vergelijking met 'simpele' string functies.
Ik zou dan ook voor de substr-strrpos combi gaan in dit geval.

Today's subliminal thought is:


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Op donderdag 24 januari 2002 00:16 schreef Annie het volgende:
btw. vergeet niet dat regexp-en 'duur' zijn in vergelijking met 'simpele' string functies.
Ik zou dan ook voor de substr-strrpos combi gaan in dit geval.
Dat is een beetje een ongenuanceerde stelling. Het hier gegeven voorbeeld resulteert gewoon in een lineaire parsing. Het uitvoeren daarvan duurt niet meer dan een constante factor langer (of korter) dan een andere methode. In dit geval zal het gebruik van de juiste string-functies iets efficiënter zijn, maar als je in PHP programmeert, kies je meestal in de eerste plaats voor duidelijkheid/leesbaarheid.

Hoe complexer een reguliere expressie wordt, hoe kleiner de overhead van het compileren ervan wordt. In enigszins complexe situaties zal het gebruik van reguliere expressies, met een bijbehorende efficiënte parser, ruimschoots efficiënter zijn dan een 'eigen' algoritme, gebaseerd op de standaard string functies, dat ook nog moeilijker te lezen, onderhouden en bugvrij te krijgen is.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op donderdag 24 januari 2002 00:57 schreef Soultaker het volgende:
Dat is een beetje een ongenuanceerde stelling.
Ik probeerde de stelling te nuanceren door het woordje 'simpele' toe te voegen.
Wat ik wilde aangeven is dat je de juiste tool moet gebruiken voor het juiste probleem. En hier is het imho overkill om een regexp los te laten op de string.
Op donderdag 24 januari 2002 00:57 schreef Soultaker het volgende:
In dit geval zal het gebruik van de juiste string-functies iets efficiënter zijn, maar als je in PHP programmeert, kies je meestal in de eerste plaats voor duidelijkheid/leesbaarheid.
Maar als je een dir met tig bestanden uit wil lezen en op elke bestandsnaam een bewerking uit wil voeren dan kies ik voor de efficientere oplossing. En, zo onduidelijk was de oplossing met de stringfuncties nou ook weer niet (een beetje commentaar in de code doet overigens ook wonderen).
Op donderdag 24 januari 2002 00:57 schreef Soultaker het volgende:
Hoe complexer een reguliere expressie wordt, hoe kleiner de overhead van het compileren ervan wordt. In enigszins complexe situaties zal het gebruik van reguliere expressies, met een bijbehorende efficiënte parser, ruimschoots efficiënter zijn dan een 'eigen' algoritme, gebaseerd op de standaard string functies, dat ook nog moeilijker te lezen, onderhouden en bugvrij te krijgen is.
Ik heb ook nergens gezegd dat je nooit een regexp moet gebruiken.

anyway, no offence enzo, just my 2 cents.

Today's subliminal thought is:


  • tomato
  • Registratie: November 1999
  • Niet online
Soultaker: Dat is een beetje een ongenuanceerde stelling. Het hier gegeven voorbeeld resulteert gewoon in een lineaire parsing.
Nee, dat is niet waar. Ik neem aan dat je op het volgende patroon doelde:
code:
1
/\.[^.]*$/

Dit is een van de simpelste patronen die je kunt verzinnen waarbij backtracking een groot probleem kan worden (uiteraard is dat in dit geval zeer overdreven ;)).
In dit geval zal het gebruik van de juiste string-functies iets efficiënter zijn, maar als je in PHP programmeert, kies je meestal in de eerste plaats voor duidelijkheid/leesbaarheid.
Daar heb je gelijk in, al weet je niet hoeveel duizenden keren deze actie uitgevoerd moet worden in de applicatie. Je kunt natuurlijk altijd de conventionele string functies gebruiken met een kort comment erachter ('strip extension' oid).
Hoe complexer een reguliere expressie wordt, hoe kleiner de overhead van het compileren ervan wordt. In enigszins complexe situaties zal het gebruik van reguliere expressies, met een bijbehorende efficiënte parser, ruimschoots efficiënter zijn dan een 'eigen' algoritme, gebaseerd op de standaard string functies, dat ook nog moeilijker te lezen, onderhouden en bugvrij te krijgen is.
Dit ben ik niet met je eens. Wanneer je het over erg complexe sitaties hebt kan een eigen parser zeker efficienter zijn dan een reguliere expressie.
Je hebt zeker gelijk dat een regex dan duidelijker en makkelijker te onderhouden is (en veel gemakkelijker te implementeren natuurlijk). En natuurlijk ligt het ook aan de implementatie van string functies en reguliere expressies in de desbetreffende taal (Perl zal wat dat betreft de beste omgeving voor regexen zijn).
Nog een punt is uiteraard het optimaliseren van het pattern. Wanneer er niet goed over nagedacht wordt kan een complexe reguliere expressie _erg_ veel langzamer worden dan nodig zou zijn.

[edit]
Annie was me al voor (en nog liever ook) :)

[edit2]
Overigens heb ik het in mijn laatste alinea zelfs nog over complexe sitaties die goed met reguliere expressies op te lossen zijn. Er zijn talloze situaties waar een regex vele malen onduidelijker zal zijn dan een parser.

  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 20-03 18:27

_Gekkie_

And the cow said: Helloooooow?

Topicstarter
Tjeempie :D voel me vereerd door deze discussie :)

Ik ga me iniedergeval storten op deze verschillende functies en schrijfwijzes... (want to be honest, die reeks van /\.[^.]*$/ characters is toch niet echt leesbar :? )

Thnx alot voor al deze nuttige (en onderbouwde) reacties, dit mag voor vele een voorbeeld zijn...

Al die mensen die alleen zeggen: zie manual/go back to school etc ... Thnx!! *D

Gekkie is a proud member of TheBenny!


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 22:43

Pelle

🚴‍♂️

Ik zou dit met een split() oplossen denk ik:
PHP:
1
2
3
4
<?
$bestand = split(".", $file);
print '<a href="' . $file . '">' . $bestand[0] . '</a>';
?>

/edit
Hmm ik lees er net overheen.. maar meerdere punten wil je ook.. euhm dat kan ook wel; moet je alleen nog even de array-length van $bestand uitlezen en op basis daarvan $bestand[0] tot $bestand[length-2] printen.
Omslachtiger dan een regex, dat ben ik helemaal met je eens.
Pagina: 1