[php] preg_replace vraag

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste tweakers,

Stomme en simpele vraag maar ik kan nergens het antwoord vinden.

Stel ik heb een zin als volgt:
"broodje frikandel met mayo" en ik wil dat steeds vanaf de laatste spatie, (voor mayo) dus alles wordt verwijderd, hoe kan ik dit voorelkaar krijgen met preg_replace ?

mayo moet dus uit de zin verdwijnen.

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 18-09 21:53

Tux

Ik denk dat je beter met substr() en strrpos() kan werken.
PHP:
1
$string = substr($string, 0, strrpos($string, " "));

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • DeadMetal
  • Registratie: Mei 2002
  • Laatst online: 15:00
Ik zou met $positie = strrpos($string, " "); de positie van de laatste spatie vinden.
Vervolgens kunnen we door middel van $string2 = substr($string, 0, $positie) al het voorgaande te pakken krijgen.

Acties:
  • 0 Henk 'm!

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 17:38
ik zou het zo doen:
PHP:
1
2
3
$str = "broodje frikandel met mayo";
$words = explode(" ", $str);
$lastword = end($words);

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 18-09 21:53

Tux

Mafioso, hij wil het eerste gedeelte van de string zonder het woord mayo. Hiermee zoek je alleen het woord mayo.

Bovendien maak je nu een array van de zin, wat natuurlijk een stuk meer geheugen inneemt als het een lange zin zou zijn dan een paar stringbewerkingen.

Als je alleen het laatste woord zou willen hebben, zou ik het zo doen:
PHP:
1
$string = substr($string, strrpos($string, " ") + 1);

[ Voor 21% gewijzigd door Tux op 12-08-2006 13:59 ]

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat strpos kan ik wel volgen. Maar hoe kom ik bij de laatste spatie ? For loop je ? of is er een andere truuk ?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 12 augustus 2006 @ 14:05:
Dat strpos kan ik wel volgen. Maar hoe kom ik bij de laatste spatie ? For loop je ? of is er een andere truuk ?
strrpos gebruiken, met dubbel-r dus

Sneller dan regular expressions, sneller dan exploden, en simpel genoeg.

Acties:
  • 0 Henk 'm!

  • DeadMetal
  • Registratie: Mei 2002
  • Laatst online: 15:00
Ahja, dat moet je maar net opvallen, ik kan me voorstellen dat je die extra 'r' in de voorbeelden van Tux en mij niet opmerkt, als je niet weet dat die functie bestaat.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb al werkend. Bedankt iedereen ! _/-\o_

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

For the record, de regexp zou zoiets als dit zijn:
code:
1
/\s[\w\d]+$/

Maar, dan heb je er nog een spatie voorstaan. :)

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

RedRose schreef op zaterdag 12 augustus 2006 @ 15:22:
For the record, de regexp zou zoiets als dit zijn:
code:
1
/\s[\w\d]+$/

Maar, dan heb je er nog een spatie voorstaan. :)
Eerder preg_replace ( '/ [^ ]*$/', '', $string );

Hij heeft het namelijk over een spatie, niet over whitespace. Er is ook nergens gezegd dat er alleen word characters voor mogen komen na de spatie, volgens mij. [\w\d] is sowieso zinloos omdat in \w ook al cijfers worden meegenomen. En met de + quantifier ben ik het ook niet eens. De laatste spatie is de laatste spatie.

Maar zoals al gezegd zijn regular expressions zware overkill.

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Verwijderd schreef op zaterdag 12 augustus 2006 @ 16:53:
[...]

Eerder preg_replace ( '/ [^ ]*$/', '', $string );

Hij heeft het namelijk over een spatie, niet over whitespace. Er is ook nergens gezegd dat er alleen word characters voor mogen komen na de spatie, volgens mij. [\w\d] is sowieso zinloos omdat in \w ook al cijfers worden meegenomen. En met de + quantifier ben ik het ook niet eens. De laatste spatie is de laatste spatie.

Maar zoals al gezegd zijn regular expressions zware overkill.
Tenzij het laatste karakter een spatie is. Ik dacht dat \w alleen alfa karakters had, maar dat zal dan wel niet. Sowieso is * idd beter. Maar, zware overkill en beide doen hun werk.

Sundown Circus

Pagina: 1